LNK2019 C ++中嵌套类的错误

时间:2017-12-26 17:19:49

标签: c++ linker-errors lnk2019

我是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:__ thishisall   FOO :: bar_interface ::点::点(INT,INT)”   (?? 0Point @ bar_interface @ @@ foo的QAE @ HH @ Z)   在函数“public:void __thiscall中引用   FOO :: bar_interface :: onStartup(无效)”   (?onStartup @ bar_interface @ @@ FOO QAEXXZ)

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

2 个答案:

答案 0 :(得分:0)

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

你需要的地方:

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

答案 1 :(得分:0)

从上面的代码中删除所有以#开头的行,并解决问题的原因。

相关问题