C++:错误 LNK:无法解析的外部符号,由虚函数产生

标签 c++ interface virtual lnk2019

我的界面的类等概览!

Animal.H:

class Animal
{
public:
   virtual void walk();
}

动物.CPP

=空

牛.H:

class Cow : public Animal
{
public:
   virtual void walk();
}

在这里它应该自动知道函数 walk 是从它派生的类中获取的,对吗? (例如 Animal..)当我不定义函数 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::...”之类的东西?以及我继承和使用界面的方式?

因为这样我得到了我从接口(interface)创建的每个函数,所以每个虚拟函数都会给我以下错误:

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 的某个地方??)

先谢谢大家

最佳答案

class Animal
{
public:
   virtual void walk();
}

您需要定义该函数或使其成为纯虚拟的

class Animal
{
public:
   virtual void walk() = 0;
}

关于C++:错误 LNK:无法解析的外部符号,由虚函数产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273578/

相关文章:

c++ - 从两个相同的派生类派生一个类

c# - 如何在 C# 中浏览本地虚拟文件夹?

C++ 内存泄漏

C++,从 ‘char’ 到 ‘const char*’ 的无效转换

java - 未实现所有接口(interface)方法的类

c# - C# 中的接口(interface)和后期绑定(bind)

c++ - 如何使用 Qt 打印 unicode 字符?

用于除以 2 个整数常量的 C++ 嵌入式平台可读性

java - 难以理解具有嵌套函数的 Java 实现(并用 C++ 对其进行编码)

PHP 5.2 类虚拟静态方法