重复的符号链接器错误(C ++帮助)

时间:2010-06-02 00:26:32

标签: c++ linker constraint-programming

我正在学习一些CSP(约束满足)理论的东西,并且使用this库来解析XML文件。我正在使用Xcode作为IDE。

我的程序编译得很好,但是当它链接文件时,我得到XMLParser_libxml2.hh文件的重复符号错误。我的文件是这样分开的:

包含上面的XMLParser文件的类头文件 包含类头文件
的类实现文件 包含类头文件

的主文件

复制符号出现在main.o和classfile.o中,但据我所知,我实际上并没有将该.hh文件添加两次。

完整错误:

ld: duplicate symbol bool CSPXMLParser::UTF8String::to<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >&) constin
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/dStructFill.o and
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/main.o`

将类的实现复制到主文件中并将类实现文件从编译目标中删除会消除错误,但这样一来就是混乱的混乱,我将很快添加更多的类(它会很高兴将它们放在单独的文件中。)

正如我已经理解的那样,这是由文件(XMLParser_libxml2.hh)在一个文件中同时具有类和函数定义和实现引起的(似乎这可能是由于使用而需要的)那个'标题'文件中的模板)。关于如何在main.cpp中粘贴所有类文件的任何想法? (我已尝试#ifdefs,但它们不起作用。)

1 个答案:

答案 0 :(得分:3)

詹姆斯是对的。头文件中的三个模板函数需要内联声明才能正确链接。谢谢!