0

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

这里分别是三个文件。

主文件

#include <iostream>
#include "Burrito.h"
using namespace std;

int main() {

    Burrito bo;

    return 0;
}

墨西哥卷饼.h

#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 进行编译。

4

3 回答 3

5

我正在使用代码块

这就是问题所在。

如果您开始学习 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++ 初学者书籍都会解释它是如何工作的。

于 2012-07-04T14:26:06.663 回答
1

当您将对象链接在一起以获得最终的可执行文件时,您忘记正确链接来自 burrito.cpp 文件的编译对象

如果您使用 Makefile 进行构建,您的最终输出规则应该类似于“-o main main.o burrito.o”

于 2012-07-04T14:22:58.257 回答
0

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

于 2015-08-15T17:08:51.557 回答