ld:重复的符号

问题描述:

我正在学校项目上工作,我从Xcode中得到一些奇怪的错误。我使用TextMate的Command + R函数来编译项目。编译似乎工作正常,但链接失败,并显示一条错误消息,我不明白。ld:重复的符号

LD输出:

LD:重复符号text_field(标准:: basic_istream> &)在/path/final/build/final.build/Release/final.build/Objects-normal/ppc/ generics.o和/path/final/build/final.build/Release/final.build/Objects-normal/ppc/main.o collect2:LD返回1个退出状态

下面是我的文件io_functions。 cpp这是整个项目中唯一的text_field声明。

#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 

怎么回事?出于多种原因,我不想发布我的项目的全部源代码。

我的第一个想法是,你在链接器命令中包含了两次,但它似乎在抱怨在main.ogenerics.o中具有相同的功能。

因此,您看起来像是将io_functions.cpp文件包含到main.cppgenerics.cpp,这在最佳时间是一个坏主意。

你应该有一个头文件(例如,io_functions.h),指定包含在io_functions.cpp一切,包括文件到其他两个。

听起来像io_functions.cpp被包含两次(一次是由generics.cpp,一次由main.cpp)。

+0

不#ifndef防止发生? – epochwolf 2008-11-12 01:26:32