2017-06-15 41 views
0

我看了未定義引用錯誤多個其他職位,但我看不到我的代碼的任何錯誤。有什麼我不抓住?我在ubuntu命令行中用g ++編譯。我收到「未定義的引用」的錯誤,我不明白爲什麼(C++ OO)

這裏是我的代碼,並從終端的錯誤:

Main.cpp的:

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

using namespace std; 


int main(){ 
    Object* o = new Object(3,6,9); 
    o->printVolume(); 
    delete o; 
    return 0; 
} 

Object.h:

#ifndef OBJECT_H_ 
#define OBJECT_H_ 

class Object 
{ 
public: 
    Object(double xSize, double ySize, double zSize); 
    ~Object(); 
    void printVolume(); 
private: 
    double x,y,z; 
}; 

#endif 

Object.cpp:

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


using namespace std; 

Object::Object(double xSize, double ySize, double zSize){ 
    x = xSize; 
    y = ySize; 
    z = zSize; 
} 

Object::~Object(){ 
    cout << "Object destroyed." << endl; 
} 

void Object::printVolume(){ 
    cout << x * y * z << endl; 
} 

錯誤:

/tmp/ccUeuPTn.o:在函數main': Main.cpp:(.text+0x47): undefined reference to Object :: Object(double,double,double)' Main.cpp :(.text + 0x57):未定義的引用Object::printVolume()' Main.cpp:(.text+0x68): undefined reference to Object ::〜Object()' collect2:錯誤:LD返回1退出狀態

有沒有辦法,我失去了一些東西?

+0

你怎麼編? – tkausl

+0

g ++在終端 –

+0

我運行: '〜/ Desktop/C++ Projects/Forge/src $ g ++ -I ../ include Main.cpp -o Main.o' –

回答

1

編譯似乎已經成功,這些錯誤會顯示爲鏈接器(或一些其他類型的編譯後步驟的)生產和他們告訴你,你的Object::Object(double xSize, double ySize, double zSize)構造函數是無處可尋。

僅通過包含來自Main.cppObject.h來讓編譯器知道您的對象是不夠的;這將導致編譯成功,但這只是故事的一半。

故事的另一半是鏈接也必須成功,所以你必須在鏈接過程中以某種方式使Object.o可用於Main.o

+0

謝謝你,我是新來的Linux和編譯沒有一個IDE,所以我不知道在構建步驟真正的推移,我會去看看進入鏈接和如何做到這一點! –

+0

好。祝你好運,但如果你想要我的建議,***不要嘗試沒有IDE。這就像試圖用紙夾建造艾菲爾鐵塔。它可以完成,但它會受到傷害。 –

相關問題