我收到“未定义的引用”的错误,我不明白为什么(C++ OO)

问题描述:

我看了未定义引用错误多个其他职位,但我看不到我的代码的任何错误。有什么我不抓住?我在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' –

编译似乎已经成功,这些错误会显示为链接器(或一些其他类型的编译后步骤的)生产和他们告诉你,你的Object::Object(double xSize, double ySize, double zSize)构造函数是无处可寻。

仅通过包含来自Main.cppObject.h来让编译器知道您的对象是不够的;这将导致编译成功,但这只是故事的一半。

故事的另一半是链接也必须成功,所以你必须在链接过程中以某种方式使Object.o可用于Main.o

+0

谢谢你,我是新来的Linux和编译没有一个IDE,所以我不知道在构建步骤真正的推移,我会去看看进入链接和如何做到这一点! –

+0

好。祝你好运,但如果你想要我的建议,***不要尝试没有IDE。这就像试图用纸夹建造艾菲尔铁塔。它可以完成,但它会受到伤害。 –