Zum BeispielC++ unterschiedliche Header-Dateien mit gleicher Implementierung der Klasse in mehreren Quelldateien
A. h
class Dummy {
public:
Dummy() { std::cout << "a.h" << std::endl; }
};
b.h
class Dummy {
public:
Dummy() { std::cout << "b.h" << std::endl; }
};
c.cc
umfassen#include "a.h"
void test() {
Dummy a;
}
d.cc
#include "b.h"
int main() {
Dummy a;
return 0;
}
kompilieren Dann Quelldateien mit dem Befehl
g++ d.cc c.cc
Ausgang ist
b.h
aber mit dem Befehl
g++ c.cc d.cc
Ausgang ist
a.h
Meine Frage ist, warum keine multiple definition
es Fehler ist und warum die Ausgabe auf Bestellung des Kompilierung hängt?
Was ist 'A A'? Meinst du "Dummy"? – Mixhab
Der Konstruktor von 'Dummy' ist in beiden Header-Dateien nicht gleich definiert. Das Ergebnis ist daher undefiniertes Verhalten, das ein Compiler nicht diagnostizieren muss. d.cc wird nicht kompiliert, da es keine Definition der Klasse A gibt. – Peter
@Mixhab behoben, danke – Scy