Tengo un espacio de nombres con función en línea que se utilizará si varios archivos de origen. Al intentar vincular mi aplicación, la función en línea se informa como símbolos duplicados. Parece que mi código simplemente no alinearía las funciones y me preguntaba si este es el comportamiento esperado y la mejor forma de lidiar con él.función en línea en el espacio de nombres generar símbolos duplicados durante el enlace en gcc
que utilice las siguientes opciones: gcc -g -Wextra -pedantic -Wmissing-campo-inicializadores -Wredundant-decls -Wfloat-igual--Wno reordenación -Wno-largo tiempo El mismo estilo de código parece compilar y enlace correctamente cuando se construye en un entorno VC7.
El ejemplo de código siguiente muestra la estructura del código:
/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}
/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...
¿Está bien una variable global en cada archivo cpp? Eso causaría un error de símbolo duplicado. Suponiendo que no es global, su ejemplo es legal C++. Intenta compilar con -Winline. ¿Qué versión de gcc estás usando? –
Publique el mensaje del compilador real. ¿Se produce el error con un mínimo de archivos fuente (solo las líneas mencionadas sin las cosas implícitas en ...)? –
Una vez que cambié uno de los nombres de 'OK' a' OK1', agregué una función 'main' vacía y eliminé el' ... '; compilar ambos archivos con las opciones que proporcionó funcionó correctamente para mí. Necesita publicar más detalles ya que la causa de su error no está aquí. –