2014-02-12 25 views
2

這是我爲了更好地理解此問題而製作的最小程序。嘗試將類別分隔爲.h,.cpp時發生錯誤

ADT.h

#ifndef ADT_H 
#define ADT_H 

class ADT {  
public: 
     void print(); 
}; 

#endif 

ADT.cpp

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

using namespace std; 

void ADT::print() 
{ 
    cout << "This program works." << endl; 
} 

testADT.cpp

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

using namespace std; 

int main(void) 
{ 
    ADT sa; 
    sa.print(); 

    return 0; 
} 

我用VIM編譯它/ MinGW的編譯器我的學校給我提供像這樣:

g++ testADT.cpp 

其中產生以下錯誤:

C:\Users\King\AppData\Local\Tempcc6eoWAP.o:testADT.cpp(.text+0x15 reference to 'ADT::print()' 
collect2.exe error: ld returned 1 exit status 

你能解釋一下這個錯誤信息,並說明我的代碼中的錯誤?

+0

這是不是一個錯誤,那就是你輸入編譯它是什麼。你得到了什麼錯誤? –

+0

已更新的錯誤消息 –

+1

如果您嘗試構建目標文件('testADT.o'),那麼您應該使用'-c'標誌。如果您正在嘗試構建可執行文件,則必須鏈接到ADT.o文件中(或者將兩個源文件傳遞給編譯器)。 – Beta

回答

3

您沒有發佈錯誤,但是我看到您在標頭中的void print()之後缺少分號。

編輯:這是一個鏈接器錯誤。每個源文件應該被編譯成一個目標文件;然後鏈接目標文件:

g++ -c -oADT.o ADT.cpp 
g++ -c -otestADT.o testADT.cpp 
g++ -oADT ADT.o testADT.o 

你也可以做到在同一行中michaeltang的答案,但你不能單獨重新編譯源(2步法秤更好)。

+0

已更新的錯誤消息 –

2

你也應該編譯ADT.cpp

g++ -o testadt testADT.cpp ADT.cpp 
相關問題