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

时间:2017-06-15 17:46:50

标签: c++ oop undefined-reference

我查看了有关未定义引用错误的其他多篇帖子,但我在代码中看不到任何错误。有没有我没有抓到的东西?我正在使用ubuntu命令行中的g ++进行编译。

这是我的代码和终端的错误:

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退出状态

有什么东西我不见了吗?

1 个答案:

答案 0 :(得分:1)

编译似乎已成功,并且这些错误似乎是由链接器(或其他一些后编译步骤)产生的,它们告诉您无法找到Object::Object(double xSize, double ySize, double zSize)构造函数。< / p>

通过包含Object.h中的Main.cpp来让编译器了解您的对象是不够的。这将导致编译成功,但这只是故事的一半。

故事的另一半是链接也必须成功,因此您必须以某种方式在链接期间Object.o使Main.o可用。