当前位置:  开发笔记 > 编程语言 > 正文

ld:重复的符号

如何解决《ld:重复的符号》经验,为你挑选了2个好方法。

我正在研究一个学校项目,我从Xcode那里得到了一些奇怪的错误.我正在使用TextMate的Command + R函数来编译项目.编译似乎工作正常但链接失败与我不明白的错误消息.

ld输出:

ld:在/path/final/build/final.build/Release/final.build/Objects-normal/ppc/generics.o和/ path/final/build/final中复制符号text_field(std :: basic_istream>&). build/Release/final.build/Objects-normal/ppc/main.o collect2:ld返回1退出状态

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

#include 
#include 
#include 

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

出了什么问题?出于多种原因,我不想发布我的项目的整个来源.



1> paxdiablo..:

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

所以看起来你将io_functions.cpp文件包含在内,main.cpp并且generics.cpp在最好的时候这是一个坏主意.

您应该有一个头文件(例如io_functions.h),它指定包含的所有内容,io_functions.cpp并将该文件包含在另外两个中.



2> Josh Kelley..:

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


仅在编译单元内 - 这里有两个独立的编译单元.ifndef会阻止你在main.cpp中包含两次文件.
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有