34 Stimmen

Fehler bei mehreren Definitionen einschließlich C++-Header-Datei mit Inline-Code aus mehreren Quellen

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?

-1voto

Mahendra Punkte 1
//Baseclass.h  or  .cpp

#ifndef CDerivedclass
#include "Derivedclass.h"
#endif

or
//COthercls.h    or .cpp

#ifndef CCommonheadercls
#include "Commonheadercls.h"
#endif

I think this suffice all instances.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X