Inheritance C++;错误LNK2019:多标头类中未解析的外部符号
全部 我打赌这是一个经常被问到的问题。但每次都是在不同的背景下提出的。我的问题是:我在VS2012 Express中有一个项目。该项目包含很少的头文件。在这里粘贴整个项目是没有意义的,因此我只给出一个简单的结构 在header.h头文件中,我有一个父类Sim,定义如下:Inheritance C++;错误LNK2019:多标头类中未解析的外部符号,inheritance,visual-studio-2012,lnk2019,Inheritance,Visual Studio 2012,Lnk2019,全部 我打赌这是一个经常被问到的问题。但每次都是在不同的背景下提出的。我的问题是:我在VS2012 Express中有一个项目。该项目包含很少的头文件。在这里粘贴整个项目是没有意义的,因此我只给出一个简单的结构 在header.h头文件中,我有一个父类Sim,定义如下: class Sim { protected: // some member data public: Sim(int x, int y, A a); vector<int
class Sim
{
protected:
// some member data
public:
Sim(int x, int y, A a);
vector<int> return_parameters(A a); // problems happen at this function
// class A is defined in another header file and properly included here
// function return_parameters has no definition, thus is an abstract function
}
Sim::Sim(int x, int y, A a)
{// some operations}
编译器给出一个LNK2019错误,表示函数Sim_-son::Sim_-son(void)中引用的未解析外部符号Sim::return_参数
我将行“Obj_son.return_parameters(a)”改为逗号,然后错误消失。所以我想这是麻烦的根源
有人能帮我摆脱这一切吗?非常感谢
致意
Long首先,你的main应该是
int main() {
return 0;
}
第二,你有一个代码>在下面的语句之后
Obj_son.return_parameters(a)
此外,您的类“Sim”需要以结尾代码>在类Sim
的声明中,您告诉编译器您有一个名为return\u parameters
的函数,但您没有给它一个实现,因此不会生成Sim::return\u parameters
的目标代码。只要不调用此函数就可以了,因为它的目标代码不是必需的。但是当您调用它时,链接器需要它的目标代码,但找不到它,因此它会给出一个错误
发生这种情况是因为您没有告诉编译器return\u parameters
是一个虚拟函数。尝试:
class Sim
{
protected:
// some member data
public:
Sim(int x, int y, A a);
virtual vector<int> return_parameters(A a) = 0;
}
问题在于,不提供函数体并不能使函数成为虚拟函数。因此,提供了关键字virtual
:)
在我看来,您需要更多一点关于虚拟函数的培训。请查看此链接:欢迎使用堆栈溢出!您不需要在帖子中包含签名-您的用户卡将自动添加。阅读更多细节。
Obj_son.return_parameters(a)
class Sim
{
protected:
// some member data
public:
Sim(int x, int y, A a);
virtual vector<int> return_parameters(A a) = 0;
}
class Sim
{
protected:
// some member data
public:
Sim(int x, int y, A a);
virtual vector<int> return_parameters(A a)
{
return vector<int>();
}
}