使用对象和类的初学者遇到以下错误

Beginner working with objects and classes getting the following errors

本文关键字:遇到 错误 初学者 对象      更新时间:2023-10-16

这是我一直在遵循的教程,我已经完成了它所说的一切,但它不起作用。我有三个文件:main.cpp,burrito.h(类)和burrito.cpp。

这里分别是三个文件。

主.cpp

#include <iostream>
#include "Burrito.h"
using namespace std;
int main() {
    Burrito bo;
    return 0;
}

墨西哥卷饼

#ifndef BURRITO_H
#define BURRITO_H

class Burrito {
    public:
        Burrito();
};
#endif // BURRITO_H

墨西哥卷饼.cpp

#include <iostream>
#include "Burrito.h"
using namespace std;
Burrito::Burrito() {
    cout << "Hello World" << endl;
}

当我构建并运行时,出现以下错误:

...undefined reference to `Burrito::Burrito()'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 6 seconds)
1 errors, 0 warnings

我正在使用CodeBlocks进行编译。

我正在使用代码块

这就是问题所在。

如果您开始学习C++那么(不幸的是)学习翻译单元是必不可少的。 像 Code::Blocks 这样的 IDE 会向你隐藏这个细节——在这种情况下,它做错了(虽然这不是 Code::Blocks 的错误,但它不能自动猜测在这种情况下没有配置该做什么)。

一开始,放下 IDE,转到命令行进行编译。分别编译两个翻译单元,并将它们显式链接在一起。

g++ -o burrito.o burrito.cpp
g++ -o main.o main.cpp
g++ -o main main.o burrito.o

每本好的初学者C++书都会解释它是如何工作的。

当您将对象链接在一起以获取最终的可执行文件时,您忘记了正确链接来自墨西哥卷饼.cpp文件的编译对象

如果你使用 Makefile 进行构建,你的最终输出规则应该有类似"-o main main.o burrito.o"的内容。

使用代码块 13.12 我右键单击 Burritto.cpp文件选择属性,然后选择构建选项卡并选中编译文件和链接文件复选框,然后单击确定保存所有内容然后运行并且效果很好。