tru*_*ktr 0 c++ compiler-errors
我有这个错误:
permute_append.o: In function `CISP430_A5::charList_join(char const*, CISP430_A5::linked_list<char>)':
permute_append.cpp:(.text+0x0): multiple definition of `CISP430_A5::charList_join(char const*, CISP430_A5::linked_list<char>)'
main.o:main.cpp:(.text+0x0): first defined here
collect2: ld returned 1 exit status
make: *** [main] Error 1
Run Code Online (Sandbox Code Playgroud)
什么(.text+0x0)意思?我习惯看到行:列号(例如57:68),但我不知道它是什么(.text+0x0)意思.
这是代码:https://gist.github.com/1340872/e25ec2aaac99c4005f4b33e6236750a2a6f1791f
这意味着在链接期间报告错误,而不是编译.
在对象模块的最开始报告链接错误(我的猜测是在它将第一个数据发送到.text段之前).
简而言之:它在这里并不重要,但是其他链接器错误我可以参考例如使用未解析外部的地方.多个定义显然出现在多个位置,这显然是链接器无法确定要报告的位置的原因.
提示 99%的情况发生在非通用非实例方法(在本例中为CISP430_A5::charList_join)在头文件而不是cpp文件中定义时.该方法是静态方法吗?
编辑确实问题是该方法是在标题内定义的.linked_list.h的第201行包含 linked_list.template,表示包含 linked_list.template中的所有定义.有效地,这是与具有定义内直接在头文件.
现在,因为
linked_list.h包括在main.cpp和permute_append.cpp main.o和permute_append.o被链接到main可执行文件你最终会得到两个相互矛盾的全局自由函数定义charList_join.我修好了东西并上传到我的要点