C++ 重复符号
我正在做一个学校的项目,我从Xcode得到一些奇怪的错误。我正在使用TextMate的Command+R函数编译项目。编译似乎工作正常,但链接失败,并显示一条我不理解的错误消息 ld输出: ld: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中的重复符号文本字段(std::basic_istream>&) collect2:ld返回了1个退出状态 下面是我的文件io_functions.cpp这是整个项目中唯一的文本_字段声明C++ 重复符号,c++,xcode,linker,C++,Xcode,Linker,我正在做一个学校的项目,我从Xcode得到一些奇怪的错误。我正在使用TextMate的Command+R函数编译项目。编译似乎工作正常,但链接失败,并显示一条我不理解的错误消息 ld输出: ld: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
#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
#包括
#包括
#包括
使用名称空间std;
#ifndef ENDF
#定义ENDF'|'
#定义ENDR'\n'
/**
从给定的输入流中读取一个字段
用法:var=text_字段(in)
*/
字符串文本_字段(istream&in){
字符串s;
getline(in,s,ENDF);
返回s;
}
long long_字段(istream&in){
返回atol(text_字段(in).c_str());
}
int_字段(istream&in){
返回atoi(text_字段(in.c_str());
}
双双_字段(istream&in){
返回atof(text_字段(in).c_str());
}
#恩迪夫
出什么事了?出于许多原因,我不想发布我的项目的全部源代码 听起来好像io_functions.cpp被包含了两次(一次被generics.cpp包含,一次被main.cpp包含)。我的第一个想法是你在linker命令中包含了两次,但它似乎在抱怨在
main.o
和generics.o
中有相同的函数
因此,看起来您正在将io_functions.cpp
文件包含到main.cpp
和generics.cpp
中,这在最好的时候是个坏主意
您应该有一个头文件(例如,io_functions.h
),指定io_functions.cpp
中包含的所有内容,并将该头文件包含在其他两个头文件中。使用“inline”关键字复制方法
inline string text_field(istream &in)
内联函数是实际函数,其函数体的副本直接注入函数调用的每个位置
有关详细信息,请参见ifndef不会阻止这种情况发生吗?仅在编译单元内-这里有两个独立的编译单元。ifndef将阻止您在main.cpp中两次包含该文件。