2014-11-16 34 views
2

尽管XCode在编译前没有标记任何错误,但在实际编译时它会显示4。他们是茫然......不知道为什么XCode 6.1无法编译我的C++程序

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

诺贝尔奖的堆栈溢出大师谁捞出我出这一个的。

回答

1

你声明类的静态成员,但你没有任何模块中定义它:

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

这需要有这样一个且只有一个模块:

HtmlProcessor DocTree::_hp; 
1

您正在声明头文件中的函数,但未在.cpp文件中定义(实现)它们。我无法在.cpp文件中找到构造函数和析构函数的定义,尽管您在头文件中有声明。链接器然后抱怨,因为它无法找到所需的目标代码来创建HtmlProcessor的实例。

因此,请确保你要么声明构造函数为空,像

HtmlProcessor(){} 

或完全消除声明, 或使用=default(如果你使用C++ 11)。

与静态声明DocTree::_hp;相同,您需要在某处定义它。