我查看了有关未定义引用错误的其他多篇帖子,但我在代码中看不到任何错误。有没有我没有抓到的东西?我正在使用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退出状态
有什么东西我不见了吗?
答案 0 :(得分:1)
编译似乎已成功,并且这些错误似乎是由链接器(或其他一些后编译步骤)产生的,它们告诉您无法找到Object::Object(double xSize, double ySize, double zSize)
构造函数。< / p>
通过包含Object.h
中的Main.cpp
来让编译器了解您的对象是不够的。这将导致编译成功,但这只是故事的一半。
故事的另一半是链接也必须成功,因此您必须以某种方式在链接期间Object.o
使Main.o
可用。