Nathaniel Knuth
Nathaniel Knuth

Reputation: 3

undefined reference to `function_name'

I moved from Windows to Ubuntu and I wanted to try some C++ programming on Ubuntu. So here is very simple code and very stupid error which I can't resolve:

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;
}

and Main.cpp

#include "horse.h"

int main(){

    Horse h;

    h.saySomething();

}

After I compile (compilation is successful) and run this I get this error message:

/tmp/ccxuDyrd.o: In function `main':
Main.cpp:(.text+0x11): undefined reference to `Horse::saySomething()'
collect2: ld returned 1 exit status

Please help me somehow.

Upvotes: 0

Views: 154

Answers (2)

vsoftco
vsoftco

Reputation: 56547

Try

g++ -c main.cpp horse.cpp (to compile)

g++ -o a.out main.o horse.o (to link)

Upvotes: 2

Christian Hackl
Christian Hackl

Reputation: 27528

It seems you only compiled your code but did not link the resulting object files. You probably invoked the compiler like this:

g++ main.cpp

You should instead compile every *.cpp file separately and then link each resulting *.o file. And you should do this with a Makefile.

Actually, the basic idea is the same on Windows with MSVC. The compiler produces object files, the linker links them together.

Upvotes: 1

Related Questions