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