Sto cominciando a imparare il c++, però ho subito incontrato dei problemi e mi è venuto il dubbio che questi problemi dipendano almeno in partte dal compilatore. io uso il compilatore gratuito djgpp.

il mio problema è il seguente:

// m1.cpp
class A{
public: makeAThing();
}

A::makeAthing() { }

//prog.cpp
#include "m1.cpp"

int main() {
A a;
a.makeAThing();
}

Quando compilo m1.cpp mi dà no errors. Quando compilo prog.cpp mi dà no errors. Ma quando linko mi dà "multiple definition of A::makeAThing(void)". Dove è l'errore? Anche perché sui manuali c'è la possibilità di separare la dichiarazione dall'implementazione ed è quello che io vorrei fare.
C'è qualche compilatore che permette di compilare il codice precedente?
Voi che compilatore usate?

-------------------------

p.s.
Segnalo che invece non mi dà errore il seguente esempio di programma, dove metto tutto il codice in un unico file:

class A {
public:
makeAThing();
};

A::makeAThing() { }; //funziona anche con istruzioni tra { e }

int main(){
A a;
a.makeAThing();
}

Anche il seguente codice viene dà un file exe funzionante:

// m1.cpp
class A {
public:
makeAThing() { }; //funziona anche con istruzioni tra { e }
};

// prog.cpp
#include "m1.cpp"

int main() {
A a;
a.makeAThing();
}