2010-05-18 66 views
1

我有一對夫婦在頭中的命名空間層次的一類聲明的方法:聯動命名空間功能

// MyClass.h 

namespace network { 

int Method1(double d); 
int Method2(double d); 

class MyClass 
{ 
    //... 
} 

} 

然後在

//MyClass.cpp 

int 
Method1(double d) 
{ ... } 

int 
Method2(double d) 
{ ... } 

該項目編譯乾淨定義,是一個依賴對於使用MyClass的UI項目。這些函數以前是MyClass的成員函數,但由於它更合適,所以被移動到名稱空間。

我的問題是當它到達鏈接器的UI項目抱怨:

1> network.lib(MyClass.obj):錯誤LNK2001:無法解析的外部符號 「INT __cdecl網::方法1(雙)」 (?INT @ ds @ sim @@ YAHN @ Z)

1> network.lib(MyClass.obj):error LNK2001:無法解析的外部符號「int __cdecl network :: Method2(double)」(?CINT @ ds @ sim @@ YAHN @ Z)

我在做什麼錯?

回答

2

看起來你已經把函數聲明放在名字空間塊中,但忘記了把函數實現放在名字空間塊中。請嘗試:

namespace network { 
    int 
    Method1(double d) 
    { ... } 

    int 
    Method2(double d) 
    { ... } 
} 
+0

沒錯,就是它 - 傻了。在附註中,static或extern對名稱空間函數有什麼影響? – 2010-05-18 19:13:32

1

您還需要將.cpp文件中的函數放入命名空間中。編譯器認爲它們是兩個完全不同的東西!