2008-11-12 18 views
9

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: símbolo duplicado

salida

ld:

ld: Duplicar símbolo 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 devolvió el código de salida 1

A continuación se muestra mis io_functions de archivo. 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? Por una serie de razones, no quiero publicar la fuente completa de mi proyecto.

Respuesta

15

Mi primer pensamiento fue que lo está incluyendo 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, lo que es una mala idea en el mejor de los casos.

usted debe tener un archivo de cabecera (por ejemplo, io_functions.h) que especifica todo lo contenido en io_functions.cpp e incluyen que cabecera archivo en los otros dos.

3

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

+0

No #ifndef evita que eso suceda? – epochwolf

+6

Solo dentro de la unidad de compilación, aquí tiene dos unidades de compilación separadas. El ifndef le impediría incluir el archivo dos veces en main.cpp. – paxdiablo

Cuestiones relacionadas