我收到"undefined reference"错误,我不明白为什么(C++ OO)

I'm getting "undefined reference" errors and I don't understand why (C++ OO)

本文关键字:为什么 C++ 明白 OO undefined reference 错误      更新时间:2023-10-16

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

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

主.cpp:

#include <iostream>
#include "Object.h"
using namespace std;

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

对象.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

对象.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: In function 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 个退出状态

我错过了什么吗?

编译似乎

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

仅仅通过

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

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