初学者使用对象和类获得以下错误

时间:2012-07-04 14:20:00

标签: c++ codeblocks

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

这里分别是三个文件。

的main.cpp

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

int main() {

    Burrito bo;

    return 0;
}

Burrito.h

#ifndef BURRITO_H
#define BURRITO_H


class Burrito {
    public:
        Burrito();
};

#endif // BURRITO_H

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

2 个答案:

答案 0 :(得分:4)

  

我正在使用CodeBlocks

这就是问题所在。

如果你开始学习C ++,那么(不幸的是)必要来了解translation units。像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 ++书都将解释这是如何运作的。

答案 1 :(得分:1)

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

如果你使用Makefile构建,你的最终输出规则应该是“-o main main.o burrito.o”