Ich habe eine C++-Header-Datei, die eine Klasse enthält. Ich möchte diese Klasse in mehreren Projekten verwenden, aber ich möchte keine separate Bibliothek für sie erstellen, also setze ich sowohl Methoden-Deklarationen als auch Definitionen in die Header-Datei:
// 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 ich innerhalb desselben Projekts diesen Header aus mehr als einer cpp-Datei einfüge, erhalte ich die Fehlermeldung " multiple definition of test_ns::TestClass::testMethod()
"Wenn ich die Methodendefinition innerhalb des Klassenkörpers einfüge, geschieht dies nicht:
// 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 innerhalb eines Namespaces definiert ist, sollten die beiden Formen nicht gleichwertig sein? Warum wird die Methode im ersten Fall als doppelt definiert betrachtet?