Хотя XCode не отмечает какие-либо ошибки до компиляции, он выводит 4, когда я его на самом деле компилирую. Они есть
Undefined symbols for architecture i386:
"HtmlProcessor::HtmlProcessor()", referenced from:
_main in main.o
"HtmlProcessor::~HtmlProcessor()", referenced from:
_main in main.o
"DocTree::_hp", referenced from:
DocTree::setTree(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in HtmlProcessor.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я искал в Интернете все ответы Большинство из них упоминают об изменении настроек архитектур. Сейчас у меня есть
Architectures: Universal (32/64-bit Intel) (x86_64, i386)
Base SDK: Latest OFX (OS X 10.9)
Build Active Architecture Only: No
Supported Platforms: OSX
Valid Architectures: i386
и я возился со всем, чтобы попытаться собрать мою чертову программу. Меня даже не волнует, какова целевая архитектура ….. Я делаю эту программу для собственного удовольствия и хочу, чтобы она работала на моей машине, MacBook Pro с OS X 10.9.4. Я просто хочу, чтобы эта проклятая консольная программа работала. Вы могли бы подумать, что XCode будет иметь конфигурации по умолчанию для вашей программы для запуска на вашем компьютере.
Вот исходные файлы: https://www.dropbox.com/sh/yu7tblwj14eoq1l/AAC8PfDi6la3CjE167Iz1C0da?dl=0
Нобелевская премия Гуру переполнения стека, который выручает меня из этого.
Вы объявили статический член класса, но не определили его ни в одном модуле:
class DocTree {
//...
static HtmlProcessor _hp;
//...
};
Это должно иметь это в одном и только одном модуле:
HtmlProcessor DocTree::_hp;
Вы объявляете функции в файле заголовка, но не определяете (не внедряете) их в файле .cpp. Я не смог найти определение конструктора и деструктора в файле .cpp, хотя у вас есть объявление в заголовке. Затем компоновщик жалуется, так как он не может найти необходимый объектный код для создания экземпляра HtmlProcessor
,
Поэтому убедитесь, что вы либо объявляете ctor пустым, как
HtmlProcessor(){}
или удалить декларацию вообще,
или использовать =default
(если вы используете C ++ 11).
То же самое для статического объявления DocTree::_hp;
Вам нужно где-то это определить.