Дублирующаяся Ошибка Компоновщика Символа (справка C++)

Я изучаю некоторый CSP (ограничительная удовлетворенность) материал теории прямо сейчас и пользуюсь этой библиотекой для парсинга XML-файлов. Я использую XCode в качестве IDE.

Мои прекрасные компиляции программы, но когда это идет для соединения файлов, я получаю дублирующуюся ошибку символа с файлом XMLParser_libxml2.hh. Мои файлы разделяются как таковые:

Заголовочный файл класса, который включает файл XMLParser выше
Файл реализации класса, которые включают заголовочный файл класса
Основной файл, который включает заголовочный файл класса

Дублирующийся символ происходит в main.o и classfile.o, но насколько я могу сказать, я на самом деле не добавляю это .hh файл дважды.

Полная ошибка:

ld: duplicate symbol bool CSPXMLParser::UTF8String::to, std::allocator > >(std::basic_string, std::allocator >&) 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, они не работают).

6
задан Michael W 27 April 2013 в 01:21
поделиться

1 ответ

Джеймс был прав. Три функции шаблона внутри файла заголовка должны быть объявлены встроенными, чтобы он мог правильно связываться. Спасибо!

3
ответ дан 17 December 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: