2010-06-02 6 views
6

Я изучаю некоторые вещи теории 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), имеющим определение и реализацию класса и функции в одном файле (и кажется, что это могло быть необходимо из-за использование шаблонов в этом файле 'header'). Любые идеи о том, как обойти все мои файлы классов в моем main.cpp? (Я пробовал #ifdefs, они не работают).

+3

Все ли функции (кроме функций-членов, определенных в определении класса или шаблонах функций) в заголовке, объявленном 'inline'? –

+0

нам понадобится более подробная информация о том, как структурирован ваш код, и вам нужно знать, написаны ли вами классы, генерирующие ошибки повторяющихся символов, или уже существуют. В основном, хотя это означает, что вы пытаетесь связать код дважды. Это звучит как проблема, которую я когда-то делал, и это было связано с тем, как я создавал приложение, т. Е. Использовал сочетание статической и динамической компоновки. Поэтому убедитесь, что вы связываете все статичное или все динамическое. Сочетание обоих сложнее, и я не входил в это –

+0

@James Если вы ссылаетесь на файл заголовка, который был указан в ссылке, то я считаю, что все функции являются функциями-членами функции класс. Это немного сложно сказать, поскольку код - это беспорядок. Что касается моего собственного кода, у меня нет функций, которые не являются функциями-членами. @Yan Файлы, генерирующие ошибки, в конечном итоге созданы мной. Ошибка возникла из включения заголовка XMLParser (не написанного мной) в мой заголовочный файл класса, который, в свою очередь, был включен в основные файлы функций и файлов реализации (которые я написал, а также файлы, названные в ошибке). – Vash265

ответ

3

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