2014-11-16 41 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;相同,您需要在某處定義它。