我已經看到很多關於此的問題,但沒有包含關於如何編譯這個特定用例的代碼的解釋。我運行以下命令:g++ main.cpp c.cpp testobj.cpp -o main
,但運行這給我一個Segmentation fault (core dumped)
。當我在main.cpp
的main
方法中有打印語句並刪除所有TestObj
代碼時,它確實起作用。命名空間中的C++全局變量
這是分配C::test
常量的正確方法嗎?
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";
}
測試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;
}
我保存將'TestObj testobj'的聲明更改爲'TestObj * testobj',並通過執行'* testobj = TestObj()'將初始化移動到'main()'方法。 – martijnn2008
@ martijnn2008是的,如果你考慮使用指針安全。 :)所有全局變量初始化後,總是會調用main函數。 –