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

时间:2014-11-16 04:43:15

标签: c++ xcode xcode6 static-linking

虽然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大师让我脱离了这个。

2 个答案:

答案 0 :(得分:1)

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

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

HtmlProcessor(){}

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

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

答案 1 :(得分:1)

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

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

这需要在一个且只有一个模块中使用它:

HtmlProcessor DocTree::_hp;