------------------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)" (?someMethod@SomeNamespace@@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 ...
...给它内部链接,使其在编译单元外不可见 - 即,(过度简化)链接器将不会看到它。 不推荐使用'static',并强加了该函数不能用作模板参数的限制。 现代的方法是将函数放在匿名命名空间中......
但问题是我想让方法暴露出来。我做错了什么?
答案 0 :(得分:1)
void foo(int x);
)void foo(int x) { ... }
)