与非成员函数的链接错误

时间:2010-07-29 15:09:08

标签: static namespaces

------------------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',并强加了该函数不能用作模板参数的限制。   现代的方法是将函数放在匿名命名空间中......

但问题是我想让方法暴露出来。我做错了什么?

1 个答案:

答案 0 :(得分:1)

  • 在.h(即void foo(int x);
  • 中声明您的功能
  • 定义然后在.c(即void foo(int x) { ... }