6

我现在正在学习一些 CSP(约束满足)理论的东西,并且正在使用这个库来解析 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,它们不起作用)。

4

1 回答 1

3

James was correct. The three template functions inside the header file needed to be declared inline for it to link properly. Thanks!

于 2010-06-02T10:16:23.830 回答