I所定義有這種情況:類使用全局的extern const的變量,其具有內部鏈接
// Test.h
extern const int param;
class Test
{
private:
int i;
public:
int foo();
};
和
// Test.cpp
#include "Test.h"
int Test::foo() { return param*10; }
和
// core.h
#include "Test.h"
const int param = 1; // should have internal linkage later in core.cpp
int do_stuff();
和
// core.cpp
#include "core.h"
int do_stuff() { Test obj; return obj.foo(); }
int main() { return do_stuff(); }
但是沒有鏈接器錯誤。鏈接器如何查看Test.cpp的const int param
,它是通過core.cpp中定義的core.h具有內部鏈接(默認爲const定義)?
當我重寫core.h這樣的(改變兩行):
// core.h
const int param = 1;
#include "Test.h"
int do_stuff();
總會有一個鏈接錯誤失蹤param
。然後,當我改變它是這樣的:
// core.h
extern const int param = 1;
#include "Test.h"
int do_stuff();
所有的作品再次。
我想,也許在原來的情況下,在core.cpp裏面有一個類Test的自動內聯,所以Test.cpp不存在,整個代碼都在core.cpp中,這樣一切正常。但爲什麼它應該依賴於改變core.h中的兩行?
感謝您的完美答案! – mb84