【问题标题】: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 toObject::Object(double, double, double)' Main.cpp:(.text+0x57): 未定义引用Object::printVolume()' Main.cpp:(.text+0x68): undefined reference toObject::~Object()' collect2:错误:ld 返回 1 个退出状态

我有什么遗漏的吗?

【问题讨论】:

  • 你是怎么编译的?
  • 终端中的g++
  • 我运行这个:~/Desktop/C++ Projects/Forge/src$ g++ -I../include Main.cpp -o Main.o
  • 你忘记编译和链接Object.cpp
  • 你如何将 Object.o 链接到你的主目录?

标签: c++ oop undefined-reference


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我是 linux 新手,并且在没有 IDE 的情况下进行编译,所以我不知道构建步骤中到底发生了什么,我将研究链接以及如何做到这一点!
  • 好。祝你好运,但如果你需要我的建议,不要在没有 IDE 的情况下尝试。这就像试图用回形针建造埃菲尔铁塔。可以做到,但会很痛。
猜你喜欢
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2016-02-03
相关资源
最近更新 更多