Я изучаю некоторые вещи теории 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
, они не работают).
Все ли функции (кроме функций-членов, определенных в определении класса или шаблонах функций) в заголовке, объявленном 'inline'? –
нам понадобится более подробная информация о том, как структурирован ваш код, и вам нужно знать, написаны ли вами классы, генерирующие ошибки повторяющихся символов, или уже существуют. В основном, хотя это означает, что вы пытаетесь связать код дважды. Это звучит как проблема, которую я когда-то делал, и это было связано с тем, как я создавал приложение, т. Е. Использовал сочетание статической и динамической компоновки. Поэтому убедитесь, что вы связываете все статичное или все динамическое. Сочетание обоих сложнее, и я не входил в это –
@James Если вы ссылаетесь на файл заголовка, который был указан в ссылке, то я считаю, что все функции являются функциями-членами функции класс. Это немного сложно сказать, поскольку код - это беспорядок. Что касается моего собственного кода, у меня нет функций, которые не являются функциями-членами. @Yan Файлы, генерирующие ошибки, в конечном итоге созданы мной. Ошибка возникла из включения заголовка XMLParser (не написанного мной) в мой заголовочный файл класса, который, в свою очередь, был включен в основные файлы функций и файлов реализации (которые я написал, а также файлы, названные в ошибке). – Vash265