В недоумении … Не могу понять, почему XCode 6.1 не скомпилирует мою программу на C ++

Хотя 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

Нобелевская премия Гуру переполнения стека, который выручает меня из этого.

2

Решение

Вы объявили статический член класса, но не определили его ни в одном модуле:

 class DocTree {
//...
static HtmlProcessor _hp;
//...
};

Это должно иметь это в одном и только одном модуле:

HtmlProcessor DocTree::_hp;
1

Другие решения

Вы объявляете функции в файле заголовка, но не определяете (не внедряете) их в файле .cpp. Я не смог найти определение конструктора и деструктора в файле .cpp, хотя у вас есть объявление в заголовке. Затем компоновщик жалуется, так как он не может найти необходимый объектный код для создания экземпляра HtmlProcessor,

Поэтому убедитесь, что вы либо объявляете ctor пустым, как

HtmlProcessor(){}

или удалить декларацию вообще,
или использовать =default (если вы используете C ++ 11).

То же самое для статического объявления DocTree::_hp;Вам нужно где-то это определить.

1

По вопросам рекламы [email protected]