我的界面的类等概述!
Animal.H:
class Animal
{
public:
virtual void walk();
}
Animals.CPP
= EMPTY
Cow.H:
class Cow : public Animal
{
public:
virtual void walk();
}
在这里它应该从语义上知道函数walk是从它从右派生的类中获取的? (例如,动物..)当我不定义函数walk时,应该说我应该正确定义它??
Cow.CPP:
void Cow::walk()
{
//do something specific for cow
}
SomeOtherClass.H
namespace SomeNamespace
{
void LetAnimalWalk();
}
SomeOtherClass.CPP
Cow myCow;
namespace SomeNamespace
{
void LetAnimalWalk()
{
myCow.walk();
}
}
这应该正常吗?...我的意思是,命名空间,“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...)
有谁知道我做错了什么,我找到的主要是它意味着我没有宣布一个正确的功能(在Cow.cpp的某个地方?)
先谢谢你们
答案 0 :(得分:10)
class Animal
{
public:
virtual void walk();
}
您需要定义该功能或使其成为纯虚拟功能。
答案 1 :(得分:6)
如果您有一个不想在基类中定义的虚函数,则需要将其设为抽象,这是使用以下语法完成的:
class Animal
{
public:
virtual void walk() = 0;
}
如果没有这个,你将得到一个错误,如果没有定义它,如果任何派生类没有定义它,你将得到一个错误。
答案 2 :(得分:3)
使基类中的函数为纯虚拟:
class Animal
{
public:
virtual void walk() = 0;
}
或定义一个简单的实现:
void Animal::walk()
{
return; // could also throw an exception here
}
答案 3 :(得分:1)
动物*动物=新牛();动物 - >步行();
牛myCow显然不起作用!