2013-01-21 46 views
0

我在MAC OS X上的Eclipse中有一個持久的未定義符號錯誤。我無法確定錯誤的來源爲 。持久未定義的引用

int Application::execute_Algorithm() 
{ 

    if (this->GA_On) 
{ 
    GA_Operations *gaAlgorithm = new GA_Operations(); 
    gaAlgorithm->run_algorithm(blocksSequence, bins); 
} 

else 
{ 
    packingAlgorithm->run_algorithm(blocksSequence, bins); return 0; 
}      // 

return 0; 
} 

誤差表示爲:: Undefined symbols for architecture x86_64: "binproject::GA_Operations::run_algorithm(binproject::Blocks_Sequence&, binproject::BinContainer&)", referenced from: binproject::Application::execute_Algorithm() in Application.o "binproject::GA_Operations::GA_Operations()", referenced from: binproject::Application::execute_Algorithm() in Application.o

而聲明

根據編譯器時我嘗試使用GA_Operations和gaAlgorithm-> run_algorithm .....下方會出現錯誤是:

class GA_Operations { 
public: 


GA_Operations(); 
~GA_Operations(); 


//call from main application to execute algorithm 

void run_algorithm(Blocks_Sequence &b_seq, BinContainer &container); 
... 

}; 

它也會引發類似的錯誤只要我嘗試在定義一個函數聲明執行(CPP)文件。

任何想法?這似乎只發生在這個班上。

另外,我很抱歉,如果有一個與代碼縮進一個問題,我

+1

讓我們看看你是如何「在實現中定義一個聲明的函數(CPP)file_」 – Foggzie

+0

run_algorithm定義在哪裏? – Goz

回答

0

你是顯示的錯誤是連接錯誤。這意味着編譯器認爲存在某些內容,但鏈接程序無法找到您定義(未聲明)的位置。某處你需要這樣的東西:

GA_Operations::GA_Operations() 
{ 
    // construct 
} 

void GA_Operations::run_algorithm(Blocks_Sequence &b_seq, BinContainer &container) 
{ 
    // stuff 
} 

你有這個地方嗎?如果是這樣,它是否在Application::execute_Algorithm所在的文件中?

如果不是,它在哪裏?你如何一起編譯你的整個程序,以便這些不同文件中的內容以同一個可執行文件結尾?

我完全不知道如何讓Eclipse做你需要的。我知道這是可能的,但我熟悉純粹的命令行工具。您需要告訴Eclipse,包含上述定義的.cpp文件是您的項目的一部分,應該編譯並鏈接到您創建的可執行文件中。

+0

是的,我有一個.cpp文件中的這些(實現)。 GAOperations.h。該頭文件是Application.cpp中的#include,其中execute_Algorithm被調用。所以這就是爲什麼我完全處於虧損狀態。我之前沒有遇到像以前那樣的Eclipse問題。而且這對於那個班來說似乎是地方性的。 ?? –

0

原來這是連接器設置的問題。我開啓了自動生成makefiles,問題自行解決了。

+0

我真的很討厭Eclipse這樣的東西。我知道這將是愚蠢的,而Eclipse就是這樣的。 – Omnifarious