虽然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
我已经摆弄了一切,试图让我该死的程序进行编译。我甚至不关心目标架构是什么.....我为了自己的娱乐而制作这个程序,并希望它在我的机器上运行,一台运行OS X 10.9.4的MacBook Pro。我只想要这个该死的控制台程序才能工作。你会认为XCode会有你的程序在你的机器上运行的默认配置。
以下是源文件:https://www.dropbox.com/sh/yu7tblwj14eoq1l/AAC8PfDi6la3CjE167Iz1C0da?dl=0
获得诺贝尔奖的Stack Overflow大师让我脱离了这个。
答案 0 :(得分:1)
您正在声明头文件中的函数,但不在.cpp文件中定义(实现)它们。我在.cpp文件中找不到构造函数和析构函数的定义,尽管在头文件中有声明。然后链接器会抱怨,因为它无法找到创建HtmlProcessor
实例所需的对象代码。
因此,请确保将ctor声明为空,例如
HtmlProcessor(){}
或完全删除声明,
或使用=default
(如果您使用C ++ 11)。
对于DocTree::_hp;
的静态声明,您需要在某处定义它。
答案 1 :(得分:1)
您声明了一个静态类成员,但未在任何模块中定义它:
class DocTree {
//...
static HtmlProcessor _hp;
//...
};
这需要在一个且只有一个模块中使用它:
HtmlProcessor DocTree::_hp;