Ich habe eine C++ Header-Datei mit einer Klasse. Ich möchte in mehreren Projekten diese Klasse verwenden, bu Ich möchte nicht, eine separate Bibliothek für sie schaffen, so dass ich beide Methoden Erklärungen und Definitionen in der Header-Datei setzen:mehrere Definition Fehler einschließlich C++ Header-Datei mit Inline-Code aus mehreren Quellen
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod();
};
void TestClass::testMethod(){
// some code here...
}
} // end namespace test_ns
#endif
Wenn innerhalb der gleiches Projekt, das ich diesen Header von mehr als eine CPP-Datei enthalten, erhalte ich eine Fehlermeldung, „multiple definition of test_ns::TestClass::testMethod()
“, während, wenn ich die Methodendefinition innerhalb der Klasse Körper setze dies nicht geschieht:
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod(){
// some code here...
}
};
} // end namespace test_ns
#endif
Da die Klasse definiert ist in einem Namespace, sollten die beiden Formen nicht äquivalent sein? Warum wird die Methode im ersten Fall doppelt definiert?
Danke für den Hinweis ... Ich hatte die Include-Wächter im Beispiel vergessen (aber nicht im eigentlichen Code). –