我从Windows迁移到Ubuntu,我想在Ubuntu上尝试一些C ++编程。所以这里是非常简单的代码和非常愚蠢的错误,我无法解决:
horse.h
#ifndef _horse_
#define _horse_
class Horse{
int speed;
public:
void saySomething();
};
#endif
horse.cpp
#include "horse.h"
#include <iostream>
using namespace std;
void Horse::saySomething(){
cout << "iiiihaaaaaaa brrrrr."<<endl;
}
和Main.cpp
#include "horse.h"
int main(){
Horse h;
h.saySomething();
}
编译完成后(编译成功)并运行此命令,我收到以下错误信息:
/tmp/ccxuDyrd.o: In function `main':
Main.cpp:(.text+0x11): undefined reference to `Horse::saySomething()'
collect2: ld returned 1 exit status
请以某种方式帮助我。
答案 0 :(得分:2)
尝试
g++ -c main.cpp horse.cpp
(编译)
g++ -o a.out main.o horse.o
(链接)
答案 1 :(得分:1)
您似乎只编译了代码但未链接生成的目标文件。您可能会像这样调用编译器:
g++ main.cpp
您应该分别编译每个* .cpp文件,然后链接每个生成的* .o文件。你应该用Makefile来做这件事。
实际上,Windows与MSVC的基本思路是一样的。编译器生成目标文件,链接器将它们链接在一起。