Overflowh
Overflowh

Reputation: 1114

Linking two .cpp and a .h files

I'm doing an exercise (from the third chapter of Thinking in C++) but I have a problem linking two .cpp files.

This is the exercise:

Create a header file (with an extension of ‘.h’). In this file, declare a group of functions by varying the argument lists and return values from among the following: void, char, int, and float. Now create a .cpp file that includes your header file and creates definitions for all of these functions. Each definition should simply print out the function name, argument list, and return type so you know it’s been called. Create a second .cpp file that includes your header file and defines int main( ), containing calls to all of your functions. Compile and run your program.

I've created the three files, but when I try to compile the compiler give me this error:

undefined reference to `func1()'

undefined reference to `func2(int)'|

undefined reference to `func3(char, int, double)'|

undefined reference to `func4()'|

||=== Build finished: 4 errors, 0 warnings ===|

Why it cannot found the function declaration?

##EDIT
These are my three files:

func_ex.h

void func1(void);
int func2(int i);
char func3(char c, int i, double d);
float func4(void);

func_ex.cpp

#include "func_ex.h"
using namespace std;

void func1(void) {
    cout << "void func1(void)" << endl;
}

int func2(int i) {
    cout << "int func2(int i)" << endl;
}

char func3(char c, int i, double d) {
    cout << "func3(char c, int i, double d)" << endl;
}

float func4(void) {
    cout << "func4(void)" << endl;
}

func_ex_main.cpp

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

int main(int argc, char* argv[]) {
    func1();
    int i;
    func2(i);
    char c; double d;
    func3(c, i, d);
    func4();
}

I'm usig GCC as compiler (and Code::Blocks as IDE, but I think that's not important).

Upvotes: 14

Views: 81618

Answers (7)

newbie
newbie

Reputation: 1

In code::blocks the default setting is that only one file is built.

Here's what I did to fix this problem:

project -> properties -> build targets ->
Select files related in the bottom right section.

Upvotes: 0

foobarfuzzbizz
foobarfuzzbizz

Reputation: 58637

It sounds like the file is not finding the functions appropriately. Is the header file included in both files? You can include it like:

#include "myheader.h"

Did you make sure to compile both files together? Such as:

gcc -o myprogram file1.cpp file2.cpp

Upvotes: 12

Catalin Barakat
Catalin Barakat

Reputation: 1

First of all, how can you have func1(), func2(), func3() without having a return statement. Try to put your header body inside these (#include guards) :

#ifndef func_ex.h
#define func_ex.h
/* your code */

#endif 

Upvotes: -1

Sunny Chan
Sunny Chan

Reputation: 9

For those like me who may be using the IDE BloodShed Dev C++.

Create a project folder then proceed to place your H files and your CPP files inside your project folder.

I had the same problem as mentioned above, the conclusion I came upon was that my compiler was only compiling the H files and wouldn't even read the CPP files linked to it. When I put them in a project folder my compiler would compile all files together hence allowing my code to run.

Here is a link of creating a project folder for those using Bloodshed.

http://www.horstmann.com/bigcpp/help/bloodshed/index.html

As for other IDE users, I believe the problem to be similar. IF anyone needs further elaboration just let me know.

Upvotes: 0

xda1001
xda1001

Reputation: 2459

gcc -c func_ex.cpp -o func_ex.o
gcc func_ex_main.cpp func_ex.o -o func_ex_main

Upvotes: 9

Nebiat
Nebiat

Reputation: 1

I think you should have #include"func_x.cpp" in your func_main.cpp

Upvotes: -1

Drew Wiens
Drew Wiens

Reputation: 124

You need to put an include like this:

#include "headerfilename.h"

at the very top of each .cpp document.

Upvotes: -3

Related Questions