这是我一直关注的教程,我已经完成了它告诉的所有内容,但它不起作用。我有三个文件: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进行编译。
答案 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”