0
------------------blah.h------------------------ #pragma once namespace SomeNamespace{ static void someMethod(){} } -----------------blah.c-------------------------- #include 「blah.h」 int main(int argc, char**argv){ SomeNamespace::someMethod(); return 0; }
上述工作正常,但如果我省略了「靜態」我得到:與非成員函數鏈接錯誤
>stdafx.obj : error LNK2005: "void __cdecl SomeNamespace::someMethod(void)" ([email protected]@@YAXXZ) already defined in Dude.obj 1>...\Debug\Dude.exe : fatal error LNK1169: one or more multiply defined symbols found
我讀什麼「靜態」確實給非成員函數 - http://www.velocityreviews.com/forums/t284052-static-functions.html ...
...給它內部鏈接,以便它不會是編譯單元外部可見的 - 即,(過分簡化的)鏈接器將無法看到它。 「靜態」的這種用法已被棄用,並強加了該函數不能用作模板參數的限制。 現代的方法是,而不是將函數放在一個匿名命名空間...
但事情是我想要的方法被暴露。我究竟做錯了什麼?