Я изучаю кое-что из теории 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
, они не работают).