【问题标题】:Linking failure within solution解决方案中的链接失败
【发布时间】:2014-07-17 11:41:17
【问题描述】:

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

我在 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

有人知道怎么解决吗?

【问题讨论】:

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


【解决方案1】:

当我有这样的头文件时:

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

然后我这样写cpp文件:

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

这意味着在命名空间方面我必须少写很多字,少犯错误。

【讨论】:

    【解决方案2】:

    好的,解决了,好像方法在头文件的命名空间内定义时,也应该在实现文件中显式定义为命名空间的一部分,在这种情况下:

    cci::xxxyyy() 
    { 
    ... 
    } 
    

    会起作用并且

    xxxyyy() 
    { 
    ...
    } 
    

    不会。

    【讨论】:

    • 是的,在定义函数时,您必须确保它定义在与声明它相同的命名空间中(否则它是两个不同的函数)。你可以做void cci::xxxyyyy() { ,或者namespace cci { void xxxyyyy() {
    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2013-01-06
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    相关资源
    最近更新 更多