Seb*_*rst 8 c++ virtual interface lnk2019
我界面的类等概述!
Animal.H:
class Animal
{
public:
virtual void walk();
}
Run Code Online (Sandbox Code Playgroud)
Animals.CPP
=空
Cow.H:
class Cow : public Animal
{
public:
virtual void walk();
}
Run Code Online (Sandbox Code Playgroud)
在这里它应该从语义上知道函数walk是从它从右派生的类中获取的?(ea Animal ..)当我不定义函数walk时,它应该说我应该正确定义它?
Cow.CPP:
void Cow::walk()
{
//do something specific for cow
}
Run Code Online (Sandbox Code Playgroud)
SomeOtherClass.H
namespace SomeNamespace
{
void LetAnimalWalk();
}
Run Code Online (Sandbox Code Playgroud)
SomeOtherClass.CPP
Cow myCow;
namespace SomeNamespace
{
void LetAnimalWalk()
{
myCow.walk();
}
}
Run Code Online (Sandbox Code Playgroud)
这应该工作正常吗?...我的意思是,命名空间,"Class :: ..."的东西?以及我继承和使用界面的方式?
因为这种方式我得到了我从界面制作的每个功能,所以每个虚函数都给我以下错误:
SomeOtherClass.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Cow::Walk (...etc etc...) referenced in function "void __cdecl SomeNamespace::LetAnimalWalk() (...etc etc...)
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么,我找到的主要是它意味着我没有宣布一个正确的功能(在Cow.cpp的某个地方?)
先谢谢你们
Bar*_*klı 10
class Animal
{
public:
virtual void walk();
}
Run Code Online (Sandbox Code Playgroud)
您需要定义该功能或使其成为纯虚拟功能.
如果您有一个不想在基类中定义的虚函数,则需要将其设为抽象,这是使用以下语法完成的:
class Animal
{
public:
virtual void walk() = 0;
}
Run Code Online (Sandbox Code Playgroud)
如果没有这个,你将得到一个错误,如果没有定义它,如果任何派生类没有定义它,你将得到一个错误.