2010-07-29 76 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) { ... }
相關問題