不知所措...无法弄清楚为什么XCode 6.1无法编译我的C++程序

At a loss ... Can't figure out why XCode 6.1 won't compile my C++ program

本文关键字:编译 我的 程序 C++ XCode 弄清楚 为什么 不知所措      更新时间:2023-10-16

尽管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

诺贝尔奖颁给堆栈溢出大师,他把我从这个中解救出来。

您声明了一个静态类成员,但未在任何模块中定义它:

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

这需要将其包含在一个且唯一的模块中:

HtmlProcessor DocTree::_hp;

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

因此,请确保将 ctor 声明为空,例如

HtmlProcessor(){}

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

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