c++ xcode linker

c++ - ld: símbolo duplicado



xcode linker (2)

Parece que io_functions.cpp se está incluyendo dos veces (una vez por genericics.cpp, una por main.cpp).

Estoy trabajando en un proyecto escolar y recibo algunos errores extraños de Xcode. Estoy usando la función Command + R de TextMate para compilar el proyecto. La compilación parece funcionar bien, pero la conexión falla con un mensaje de error que no entiendo.

ld de salida:

ld: símbolo duplicado text_field (std :: basic_istream> &) en /path/final/build/final.build/Release/final.build/Objects-normal/ppc/generics.o y / path / final / build / final. build / Release / final.build / Objects-normal / ppc / main.o collect2: ld devuelto 1 estado de salida

Debajo está mi archivo io_functions.cpp Esta es la única declaración de text_field en todo el proyecto.

#include <string> #include <iostream> #include <iomanip> using namespace std; #ifndef ENDF #define ENDF ''|'' #define ENDR ''/n'' /** reads one field from a given input stream Usage: var = text_field(in) */ string text_field(istream &in){ string s; getline(in, s, ENDF); return s; } long long_field(istream &in){ return atol(text_field(in).c_str()); } int int_field(istream &in){ return atoi(text_field(in).c_str()); } double double_field(istream &in){ return atof(text_field(in).c_str()); } #endif

¿Qué está pasando mal? Por una serie de razones, no quiero publicar la fuente completa de mi proyecto.


Lo primero que pensé fue que lo incluía dos veces en el comando del enlazador, pero parece que se queja de tener la misma función en main.o y generics.o .

Parece que está incluyendo el archivo io_functions.cpp en main.cpp y generics.cpp que es una mala idea en el mejor de los casos.

Debería tener un archivo de encabezado (por ejemplo, io_functions.h ) que especifique todo lo que figura en io_functions.cpp e incluya ese archivo de encabezado en los otros dos.