我收到“未定义的引用”的错误,我不明白为什么(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退出状态
有没有办法,我失去了一些东西?
编译似乎已经成功,这些错误会显示为链接器(或一些其他类型的编译后步骤的)生产和他们告诉你,你的Object::Object(double xSize, double ySize, double zSize)
构造函数是无处可寻。
仅通过包含来自Main.cpp
的Object.h
来让编译器知道您的对象是不够的;这将导致编译成功,但这只是故事的一半。
故事的另一半是链接也必须成功,所以你必须在链接过程中以某种方式使Object.o
可用于Main.o
。
谢谢你,我是新来的Linux和编译没有一个IDE,所以我不知道在构建步骤真正的推移,我会去看看进入链接和如何做到这一点! –
好。祝你好运,但如果你想要我的建议,***不要尝试没有IDE。这就像试图用纸夹建造艾菲尔铁塔。它可以完成,但它会受到伤害。 –
你怎么编? – tkausl
g ++在终端 –
我运行: '〜/ Desktop/C++ Projects/Forge/src $ g ++ -I ../ include Main.cpp -o Main.o' –