2012-11-06 49 views
0

我有一個C++類,它被引用,然後我要去聲明變量。我在objective-c中聲明:目標c接頭誤差C++類

cObject obj = cObject(); 
obj.myFunct("test"); 

但似乎存在鏈接器錯誤。它說:

Undefined symbols for architecture armv7: 
    "cObject::cObject()", referenced from: 
    -[...] in xxx.o 
    ___cxxx_global_var_init in xxx.o 
"cObject::myFunct(std::__1:basic_string<char,str::__1::char_traits<char>, str::__1::allocator<char> >)", referenced from: 
    -[///] in xxx.o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1(use -v to see invocation) 

編輯:在評論中解決第一個錯誤:不要定義一個空的構造解析的第一部分。第二部分是指調用obj.myFunct(「test」);

回答

1

您需要定義類的默認構造函數和myFunct功能的地方:

cObject::cObject() 
{ 
    ... 
} 

return_type cObject::myFunct(std::string arg1) 
{ 
    ... 
} 

如果它們被定義,請確保你他們所定義的對象文件中鏈接(即加源文件到您的Makefile /項目文件/命令行/等)。

+0

幫我,我有一個進口的頭文件 – Fallenreaper

+0

@Fallenreaper:頭文件是不夠的。您需要實際將函數的代碼寫入單獨的源文件或將定義內聯到頭文件中。 –

+1

我有導入「test.h」,然後包含實際定義的名爲「test.cpp」的關聯cpp文件是否由於某種原因不連接標頭和cpp文件之間的引用?我認爲這是自動的。也許有什麼我需要添加到頭來知道定義位於「test.cpp」? – Fallenreaper

0

這是一個2部分的答案。

錯誤的第一部分是因爲我有一個空的構造。它不允許爲空,並且如果是則會拋出錯誤。爲了解決這個問題,我刪除了構造函數,編譯器默認創建一個。

問題的另一部分是從編譯的問題。我是什麼意思?我的意思是,在這種情況下,文件test.h具有未編譯的關聯數據。我通過評論幫助解決了這個問題,但最終進入了XCode項目,並通過單擊與該部分關聯的小加號按鈕將.cpp添加到「編譯源」部分。在源代碼編譯成功後,程序運行並完美工作,調用函數,並按計劃正確聲明類。

我不採取信用什麼@AdamRosenfield,@EdS,@ H2CO3已通過其