c++codeblocksheader-filesfunction-prototypes

How to link multiple .cpp files in Code::Blocks for a single project?


While following the book C++ For Dummies, I have three files in my CodeBlocks project, main.cpp, Pen.h, and Pen.cpp. They look like this:

main.cpp:

#include <iostream>
#include "Pen.h"
//#include "Pen.cpp"

using namespace std;

int main()
{
    Pen MyPen = Pen();
    MyPen.test();
}

Pen.h:

#ifndef PEN_H_INCLUDED
#define PEN_H_INCLUDED

//#include "Pen.cpp" // Uncommenting this gives a different error

using namespace std;

class Pen
{
public:
    // attributes omitted

    // PROTOTYPES:
    // other functions omitted
    void test();
};

#endif // PEN_H_INCLUDED

Pen.cpp:

#include <iostream>
#include "Pen.h"

using namespace std;

//other function definitions omitted

void Pen::test()
{
    cout << "Test successful." << endl;
}

When I run the code as listed above, I get an "undefined reference to `Pen::test()'" error. To fix this, I changed the #include statements at the top of main.cpp to:

#include <iostream>
//#include "Pen.h"
#include "Pen.cpp"

This works as intended and correctly prints out "Test successful."

My question is this: what in the world is the point of putting a function prototype in a header file if I have to import the .cpp file later on anyways?

EDIT: It turns out this was a problem with not knowing how to use Code::Blocks rather than with the C++ language.


Solution

  • In the main.cpp include the header file:
    #include "Pen.h"

    The Pen.h file it's ok.

    You need to add the Pen.cpp file to the project tree.
    Go to Project -> Add files... and add Pen.cpp

    enter image description here