Ich habe eine Menge Fragen zu diesem Thema, aber keine Erklärung, wie Sie den Code für diesen speziellen Anwendungsfall kompilieren. Ich führe den folgenden Befehl: g++ main.cpp c.cpp testobj.cpp -o main
, aber das Ausführen gibt mir eine Segmentation fault (core dumped)
. Wenn ich die print-Anweisung in der main
-Methode in main.cpp
und alle TestObj
Code entfernen, funktioniert es.C++ globale Variable in Namespace
Ist dies der richtige Weg, um die C::test
Konstante zuzuordnen?
main.cpp:
#include "c.h"
#include "testobj.h"
TestObj testobj;
int main() {
return 0;
}
C. H:
#ifndef CONSTANTS
#define CONSTANTS
#include <string>
namespace C {
extern std::string test;
}
#endif
c.cpp:
#include "c.h"
namespace C {
std::string test = "test";
}
Test obj.h:
#ifndef TESTOBJ
#define TESTOBJ
class TestObj {
public:
TestObj();
};
#endif
testobj.cpp:
#include "testobj.h"
#include <iostream>
#include "c.h"
TestObj::TestObj() {
std::cout << C::test << std::endl;
}
Ich es speichern, um die Deklaration von "TestObj testobj" zu "TestObj * testobj" zu ändern und die Initialisierung auf die 'main()' Methode zu verschieben, indem Sie '* testobj = TestObj()'? – martijnn2008
@ martijnn2008 Ja, wenn Sie die Verwendung von Zeigern sicher betrachten. :) Die 'main'-Funktion wird immer aufgerufen, nachdem alle globalen Variablen initialisiert wurden. –