Probabilmente sui libri avrai letto anche che e` uso comune separare:
- prototipi e dichiarazioni (da inserire negli headers, .h/.hpp);
- implementazioni (da inserire nei sorgenti veri e propri, .c/.cc/.cpp).
Il problema della ridefinizione si verifica dal momento che il metodo A::makeAThing() lo definisci in entrambi i files (perche` con l`#include includi interamente m1.cpp in prog.cpp).
Quindi:
1) Compili prog.cpp -> definizione A::makeAThing() (incluso in m1.cpp)
2) Compili m1.cpp -> definizione A::makeAThing()
Il linker unisce gli output e si chiede quale sia la definizione giusta fra le due, ma non lo sa e quindi compare l`errore.
La soluzione e` questa:
Un`altra soluzione sarebbe definire il metodo 'inline' nella dichiarazione di classe, ma per adesso non penso possa interessarti.codice:// m1.hpp (dichiarazione della classe) class A { public: makeAThing(); }; // m1.cpp (implementazione della classe) A::makeAthing() { } // prog.cpp #include "m1.hpp" int main() { A a; a.makeAThing(); }
Se non hai capito rispondi qui.
Ciao.![]()