命名空间函数的链接

时间:2010-05-18 18:46:53

标签: c++ visual-studio-2005 linker

我在类的标题中在命名空间级别声明了几个方法:

// 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 network :: Method1(double)”(?INT @ ds @ sim @@ YAHN @ Z)

1> network.lib(MyClass.obj):错误LNK2001:未解析的外部符号“int __cdecl network :: Method2(double)”(?CINT @ ds @ sim @@ YAHN @ Z)

我做错了什么?

2 个答案:

答案 0 :(得分:2)

看起来您已将函数声明放在命名空间块中,但忘记将函数实现放在命名空间块中。尝试:

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

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

答案 1 :(得分:1)

您还需要将.cpp文件中的函数放入命名空间。编译器认为它们是两个完全不同的东西!