对`function_name'的未定义引用

时间:2014-05-29 19:20:59

标签: c++ ubuntu reference linker undefined

我从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

请以某种方式帮助我。

2 个答案:

答案 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的基本思路是一样的。编译器生成目标文件,链接器将它们链接在一起。