在解决方案中链接故障

时间:2014-07-17 11:41:18

标签: c++ visual-c++ linker static-linking

编辑:我知道有类似的问题,但我找不到以下问题的答案:为什么班级内的方法工作正常,而外部的方法却没有。

我在我的项目中遇到了一个奇怪的问题,我在MSVC ++ 2012中开发。我的项目由不同的代码模块组成。从问题的角度来看,重要的模块是库和GUI。它们作为同一解决方案中的不同项目存在。 我在库中有一些方法是类的一部分(在本例中是Calibration3D):

void Calibration3D::load(const std::string &path)

我在GUI中需要时使用它没有问题,但我需要使用以下方法(在课外):

void xxxyyy() 

但是当我尝试使用该功能时(在类外但在同一名称空间中),我收到以下错误:

1>project_xml.obj : error LNK2001: unresolved external symbol "void __cdecl   cci::xxxyyy(void)" (?xxxyyy@cci@@YAXXZ) 1>D:\praca_pw\cci\build-msvc2012\x64\Release\\ccigui.exe : fatal error LNK1120: 1 unresolved externals

有人知道怎么解决吗?

2 个答案:

答案 0 :(得分:2)

当我有这样的头文件时:

namespace xyz {
  void foo();
  class bar { ... };
}

然后我写这样的cpp文件:

#include "xyz.h"
namespace xyz {
  void foo() { ... }
  bar::bar() { ... }
}

这意味着我必须输入更少的内容并减少名称空间方面的错误。

答案 1 :(得分:0)

好的,解决了,似乎当在头文件中的命名空间内定义一个方法时,它也应该在实现文件中明确定义为命名空间的一部分,在这种情况下:

cci::xxxyyy() 
{ 
... 
} 

将起作用

xxxyyy() 
{ 
...
} 

不会。