LNK2019 C ++中嵌套类的错误

问题描述 投票:-1回答:2

我是C ++的新手,所以如果这是一个简单或明显的错误,我很抱歉。我一直在阅读很多其他问题和文档,但我还没有找到解决方案。

我正在尝试向大型现有项目添加新的类定义。没有我的补充,一切都完美无瑕。但是,当我在下面添加我的代码时,我在构造函数方法(以及任何其他方法)上得到LNK2019错误。我注意到添加/引用属性不会导致此链接器错误,只会导致方法。下面是产生错误的最简单示例:

标题:

namespace foo
{
  class bar_interface
  {
    public:

    //My code
    #ifndef Point_H
    #define Point_H
      class Point
      {
      public:
        Point(int x, int y);
      };
    #endif

    //existing code
    void onStartup();        
  }
}

类:

//My code
#ifndef Point_H
#define Point_H
class foo:bar_interface::Point{
public:
    Point(int x, int y)
    {
    };
};
#endif

//existing code
void bar_interface::onStartup()
{
  foo::bar_interface::Point p( (int)8, (int)8 );
  //continue existing code
}

错误1错误LNK2019:未解析的外部符号“public:__thiscall foo :: bar_interface :: Point :: Point(int,int)”(?? 0Point @ bar_interface @ foo @@ QAE @ HH @ Z)在函数“public”中引用: void __thiscall foo :: bar_interface :: onStartup(void)“(?onStartup @ bar_interface @ foo @@ QAEXXZ)

我意识到可能不需要对Point进行如此显式调用或将数字转换为整数,但我想确保我没有遗漏任何明显的东西(删除它们不会改变错误)。我已经尝试将'Point'类移动到它自己的文件并在'bar_interface'之外但在'foo'命名空间内定义它。删除#ifndef代码会产生C2011重定义错误。我不知道如何继续。

c++ linker-errors lnk2019
2个回答
0
投票

未解析的外部意味着缺少定义,即链接器无法找到命名函数的实现。

你需要的地方:

namespace foo
{
  bar_interface::Point::Point(int,int)
  { ... }
}

0
投票

从上面的代码中删除所有从#开头的行,问题的原因变得更加清晰。

© www.soinside.com 2019 - 2024. All rights reserved.