-1
我試着這樣做:使用匿名。匿名的名稱空間函數。命名空間範圍
file.h
namespace {
void fun();
const bool nevermind = Register(fun);
}
file.cpp
namespace {
void fun() {
do_some_job();
}
}
有鏈接錯誤。函數void fun()不是由鏈接器找到的。
如果我試着這樣做:
file.h
namespace {
void fun() {
do_some_job();
}
const bool nevermind = Register(fun);
}
一切都OK。
如何編譯第一種情況?我不想在* .h文件中定義函數。
不完全。同一翻譯單元中的兩個未命名的名稱空間或多或少具有相同的名稱,這與其他翻譯單元是唯一的。所以你可以在'.cpp'文件頂部的一個未命名的命名空間中聲明一個聲明,並且在另一個聲明的底部定義一個聲明,它們將會匹配,但不會跨越兩個文件。 – BoBTFish
@BoBTFish:好的,這很有道理。感謝您糾正我! – villintehaspam