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 ...
...给它内部链接,以便它不会是编译单元外部可见的 - 即,(过分简化的)链接器将无法看到它。 “静态”的这种用法已被弃用,并强加了该函数不能用作模板参数的限制。 现代的方法是,而不是将函数放在一个匿名命名空间...
但事情是我想要的方法被暴露。我究竟做错了什么?