我是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重定义错误。我不知道如何继续。
未解析的外部意味着缺少定义,即链接器无法找到命名函数的实现。
你需要的地方:
namespace foo
{
bar_interface::Point::Point(int,int)
{ ... }
}
从上面的代码中删除所有从#开头的行,问题的原因变得更加清晰。