2010-05-18 65 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文件中的函数放入命名空间中。编译器认为它们是两个完全不同的东西!