我收到 "undefined reference" 个错误,我不明白为什么 (C++ OO)
I'm getting "undefined reference" errors and I don't understand why (C++ OO)
我查看了其他多篇关于未定义引用错误的帖子,但我在我的代码中看不到任何错误。有什么我没听清楚的吗?我在 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 个退出状态
有什么我想念的吗?
编译似乎已经成功,这些错误似乎是由链接器(或某种其他类型的 post 编译步骤)产生的,它们告诉您 Object::Object(double xSize, double ySize, double zSize)
构造函数是无处可寻。
仅通过包含 Main.cpp
中的 Object.h
来让编译器了解您的对象是不够的;这将导致编译成功,但这只是故事的一半。
故事的另一半是链接也必须成功,因此您必须以某种方式使 Object.o
在链接期间对 Main.o
可用。
我查看了其他多篇关于未定义引用错误的帖子,但我在我的代码中看不到任何错误。有什么我没听清楚的吗?我在 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 个退出状态
有什么我想念的吗?
编译似乎已经成功,这些错误似乎是由链接器(或某种其他类型的 post 编译步骤)产生的,它们告诉您 Object::Object(double xSize, double ySize, double zSize)
构造函数是无处可寻。
仅通过包含 Main.cpp
中的 Object.h
来让编译器了解您的对象是不够的;这将导致编译成功,但这只是故事的一半。
故事的另一半是链接也必须成功,因此您必须以某种方式使 Object.o
在链接期间对 Main.o
可用。