我收到“未定义的引用”错误,我不明白为啥(C++ OO)
Posted
技术标签:
【中文标题】我收到“未定义的引用”错误,我不明白为啥(C++ OO)【英文标题】:I'm getting "undefined reference" errors and I don't understand why (C++ OO)我收到“未定义的引用”错误,我不明白为什么(C++ OO) 【发布时间】:2017-06-15 17:46:49 【问题描述】:我查看了有关未定义引用错误的多个其他帖子,但在我的代码中看不到任何错误。有什么我没抓到的吗?我在 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;
对象.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: 在函数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 个退出状态
我有什么遗漏的吗?
【问题讨论】:
你是怎么编译的? 终端中的g++ 我运行这个:~/Desktop/C++ Projects/Forge/src$ g++ -I../include Main.cpp -o Main.o
你忘记编译和链接Object.cpp
。
你如何将 Object.o 链接到你的主目录?
【参考方案1】:
编译似乎已成功,并且这些错误似乎是由链接器(或某种其他类型的编译后步骤)产生的,它们告诉您您的 Object::Object(double xSize, double ySize, double zSize)
构造函数无处可寻。
通过在Main.cpp
中包含Object.h
来让编译器知道你的对象是不够的;这将导致编译成功,但这只是故事的一半。
故事的另一半是链接也必须成功,因此您必须在链接期间以某种方式使Object.o
对Main.o
可用。
【讨论】:
谢谢,我是 linux 新手,并且在没有 IDE 的情况下进行编译,所以我不知道构建步骤中到底发生了什么,我将研究链接以及如何做到这一点! 好。祝你好运,但如果你需要我的建议,不要在没有 IDE 的情况下尝试。这就像试图用回形针建造埃菲尔铁塔。可以做到,但会很痛。以上是关于我收到“未定义的引用”错误,我不明白为啥(C++ OO)的主要内容,如果未能解决你的问题,请参考以下文章
我不明白为啥我的消息没有发送给每个决定收到通知的用户。它只发送给一个