2010-07-29 62 views
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 ...

...给它内部链接,以便它不会是编译单元外部可见的 - 即,(过分简化的)链接器将无法看到它。 “静态”的这种用法已被弃用,并强加了该函数不能用作模板参数的限制。 现代的方法是,而不是将函数放在一个匿名命名空间...

但事情是我想要的方法被暴露。我究竟做错了什么?

回答

1
  • 声明中.H你的函数(即void foo(int x);
  • 定义然后以.c(即void foo(int x) { ... }
相关问题