2016-02-21 50 views
0

這是基本的,但它有一個函數原型的頭文件Test.h。然後是一個帶有函數定義Test.cpp的源代碼文件。最後,我有我的Main.cpp文件調用Test.cpp中的函數。問題是我在Main.cpp中得到一個錯誤,指出function1是未定義的。你能看到我做錯了什麼嗎?C++如何鏈接我的主類與我的頭文件?

Test.h

int function1(int); 

Test.cpp的

#include "Test.h" 
#include <iostream> 

int main(){ 
} 

int function1(int i){ 
    std::cout << "fuction1(" << i << ")" << std::endl << "Returns: 1" << std::endl; 

    return 1; 
} 

Main.cpp的

#include <iostream> 
#include "Test.h" 

int main(){ 

    function1(5); 
} 

而且Test.cpp的未編譯,直到我添加了一個main()函數。我非常流利的java,這似乎與我的想法相矛盾。在java中,我只有一個主要方法,這個方法可以在我的主類中找到。其他類有一個構造函數。請幫助我建立從java到C++的連接。

+2

「你能看到我在做什麼錯了?」不,因爲你沒有告訴我們你如何使用你的編譯器。 – MikeCAT

+0

我沒有問題編譯Test.cpp _without_完全superflous main()。在這個問題中,你沒有展示你所做的一切。從Test.cpp中刪除main()後,顯示的代碼絕對沒有錯。因此,您未顯示的代碼和/或其他文件/腳本必須存在什麼問題。 –

+0

@MikeCAT我正在使用代碼塊IDE。有了這個自動編譯按鈕。通過你的評論,我假設我必須make makefile來指定編譯應該如何完成? – Vindictive

回答

5

你必須告訴編譯器它應該鏈接什麼。

首先,刪除main()的定義test.cpp,因爲試圖在一個可執行文件中將多個非靜態的main()放入全局命名空間中會導致鏈接錯誤。

然後,正確使用你的編譯器。例如,如果你使用GCC,

g++ -o Main Main.cpp Test.cpp 

g++ -c -o Main.o Main.cpp 
g++ -c -o Test.o Test.cpp 
g++ -o Main Main.o test.o 
+0

我很感激邁克,謝謝。 – Vindictive