2012-02-22 86 views
1

我做錯了什麼,我知道。我不能完全弄清楚如何通過頭文件將兩個.cpp文件鏈接在一起。調用 方法無法看到其他來源。如何鏈接C++源文件與Code :: Blocks

我使用Code :: Blocks作爲IDE與MinGW。

任何幫助將不勝感激。如果您可以顯示固定的來源,則會更加讚賞 ,並在回覆到 pastebin頁面時將其鏈接。

/***********************************main.cpp***********************************/ 
#include <iostream> 

using namespace std; 

#include "test.h" 

int main() 
{ 
    printTest();   //can't see printTest, defined in test.cpp 
    return 0; 
}; 


/***********************************test.h***********************************/ 
#ifndef TEST_H_INCLUDED 
#define TEST_H_INCLUDED 

void printTest(); 

#endif // TEST_H_INCLUDED 


/***********************************test.cpp***********************************/ 
#include "test.h" 

void printTest() 
{ 
    cout << "Hello world!" << endl; 
}; 
+3

你的代碼是正確的,你如何調用編譯器?你有沒有添加test.cpp到你的項目文件? IDE需要知道要編譯哪些文件。 – pezcode 2012-02-22 23:05:41

+0

顯示makefile。 – lapk 2012-02-22 23:06:10

+0

你是如何構建你的程序的,你的錯誤究竟是什麼? pastebin上的代碼看起來很好。 – Kitsune 2012-02-22 23:06:17

回答

3

您可能會感興趣this code blocks wiki對您有所幫助。它看起來像代碼塊使用託管構建系統,所以如果你正確地將文件添加到項目中,那麼它應該知道編譯它並鏈接到結果的對象文件中。

只是爲了更清楚地瞭解其他一些註釋,當您使用「using namespace std;」時該命名空間僅被引入到using語句所在文件的作用域中。這就是爲什麼別人告訴你明確指定std :: namespace的原因。您也可以將所有std名稱空間放入test.cpp文件的作用域中。許多人認爲這是一個壞習慣。它通常是更好地納入範圍只是你通過

using std::cout; 
using std::endl; 

需要什麼。最後,要記住的std :: ENDL增加了一個新行並刷新緩衝區,這不是一個很好的替代在所有情況下換行符。

1

在TEST.CPP通過std::cout << "Hello world!" << std::endl;

1

SANKET答案是不完整的,似乎對我更換cout << "Hello world!" << endl; 。 您需要在您的test.cpp中添加#include <iostream>,以便編譯器知道「cout」是什麼。如sanket所述,您應該在test.cpp中使用std::coutstd::endl