错误:否''在类中声明了成员函数''

言语学

我正在尝试创建一个包含虚函数的类,我想在两个子类中继承该虚函数。

我知道有人已经问过这个问题(例如,在这里那里),但是我听不懂答案。

所以我做了一个简化的示例代码,我正在尝试:

//Mother .h file 

#ifndef _MOTHER_H_
#define _MOTHER_H_
#include <iostream>

class Mother
{
 protected :
   std::string _name;
 public:
   Mother(std::string name);
   ~Mother();
   virtual std::string getName() = 0; 
};

#endif

//Mother .cpp file

#include "Mother.h"

Mother::Mother(std::string name)
{
  this->_name = name; 
}

Mother::~Mother()
{
}


//Child.h file

#ifndef _CHILD_H_
#define _CHILD_H_
#include "Mother.h"

class Child : public Mother
{
 private : 
   std::string _name;
 public:
   Child(std::string name);
   ~Child();
};

#endif


//Child .cpp file

#include "Mother.h"
#include "Child.h"

Child::Child(std::string name) : Mother(name)
{
  this->_name = name;
}

Child::~Child()
{
}

std::string Mother::getName()
{
  return this->_name;
}

这是我的main.cpp文件:

//Main.cpp file
#include "Child.h"

int main()
{
   Child l("lol");

   std::cout << l.getName() << std::endl;

   Mother& f = l;

   std::cout << f.getName() << std::endl;

   return 0;
 }

编译器的说明如下:(使用g ++ * .cpp -W -Wall -Wextra -Werror进行编译)

main.cpp: In function ‘int main()’:
main.cpp:5:9: error: cannot declare variable ‘l’ to be of abstract type‘Child’
In file included from main.cpp:1:0:
Child.h:8:7: note:   because the following virtual functions are pure within ‘Child’:
In file included from Child.h:6:0,
             from main.cpp:1:
Mother.h:14:23: note:   virtual std::string Mother::getName()

我究竟做错了什么 ?

(对不起,如果我在英语方面犯了一些错误,我不是母语人士)。

约翰·迪布林

Mother的声明中,您有:

virtual std::string getName() = 0; 

这不仅仅是一个virtual,而是一个纯粹的 virtualavirtualpure 的区别在于,即使您已经在基类中提供了实现,virtualpure品种也必须具有在派生类中实现的重写。例如:

class Foo
{
public:
  virtual void DoIt() = 0 {};  // pure virtual.  Must be overridden in the derived class even though there is an implementation here
};

class Bar : public Foo
{
public:
  void DoIt(); // override of base
};

void Bar::DoIt()
{
  // implementation of override
}

您无法使用未实现的纯virtual方法实例化类如果尝试,将出现编译器错误:

int main()
{
  Foo f;  // ERROR
  Bar b;  // OK
}

而这正是您尝试做的。您声明getName()纯净 virtualMother,但您没有在中覆盖它Child然后您尝试实例化一个Child

int main()
{
   Child l("lol");

这导致了编译器错误。

要解决此问题,请getName()Child类中提供重写

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的模板类中的C ++成员函数未声明错误

来自分类Dev

我的模板类中的C ++成员函数未声明错误

来自分类Dev

错误在编译时在类中没有声明成员函数

来自分类Dev

错误在编译时在类中没有声明成员函数

来自分类Dev

错误C2509:未在派生类中声明成员函数

来自分类Dev

错误无法在静态类中声明实例成员

来自分类Dev

我是否以错误的方式声明了getpriorityvalues函数?

来自分类Dev

C中的分段错误,同时声明了大指针数组

来自分类Dev

在头文件上声明类的=和[]运算符,“必须是非静态成员函数”错误

来自分类Dev

C ++,类:成员错误的离线声明?

来自分类Dev

C ++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)

来自分类Dev

如何访问超类的受保护成员到其派生类。如果在派生类中已经声明了同名的函数?

来自分类Dev

Xamarin绑定类别返回错误:无法在静态类中声明实例成员

来自分类Dev

错误C2248:无法访问在类中声明的私有成员

来自分类Dev

Xamarin绑定类别返回错误:无法在静态类中声明实例成员

来自分类Dev

在类成员函数中声明类成员变量

来自分类Dev

错误:在“ for”循环初始声明中声明了非变量“ strlen”-C

来自分类Dev

定义类成员函数时收到错误

来自分类Dev

在语法中的哪个点声明了类?

来自分类Dev

构造函数未设置成员变量,但声明了new

来自分类Dev

在成员函数中,错误的函数被“执行”

来自分类Dev

错误C2535:成员函数已经定义或声明

来自分类Dev

错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

来自分类Dev

尝试传递CStringArray给出错误,无法访问类'CObject'中声明的私有成员

来自分类Dev

错误C2248:“ CObject :: CObject”:无法访问在类“ CObject” afxwin.h中声明的私有成员

来自分类Dev

错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

来自分类Dev

错误C2248:无法访问在类中声明的私有成员,编译器行为异常

来自分类Dev

模板化线性代数向量类中的奇怪“成员函数不可行”错误

来自分类Dev

错误C2511:在类中找不到重载的成员函数

Related 相关文章

  1. 1

    我的模板类中的C ++成员函数未声明错误

  2. 2

    我的模板类中的C ++成员函数未声明错误

  3. 3

    错误在编译时在类中没有声明成员函数

  4. 4

    错误在编译时在类中没有声明成员函数

  5. 5

    错误C2509:未在派生类中声明成员函数

  6. 6

    错误无法在静态类中声明实例成员

  7. 7

    我是否以错误的方式声明了getpriorityvalues函数?

  8. 8

    C中的分段错误,同时声明了大指针数组

  9. 9

    在头文件上声明类的=和[]运算符,“必须是非静态成员函数”错误

  10. 10

    C ++,类:成员错误的离线声明?

  11. 11

    C ++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)

  12. 12

    如何访问超类的受保护成员到其派生类。如果在派生类中已经声明了同名的函数?

  13. 13

    Xamarin绑定类别返回错误:无法在静态类中声明实例成员

  14. 14

    错误C2248:无法访问在类中声明的私有成员

  15. 15

    Xamarin绑定类别返回错误:无法在静态类中声明实例成员

  16. 16

    在类成员函数中声明类成员变量

  17. 17

    错误:在“ for”循环初始声明中声明了非变量“ strlen”-C

  18. 18

    定义类成员函数时收到错误

  19. 19

    在语法中的哪个点声明了类?

  20. 20

    构造函数未设置成员变量,但声明了new

  21. 21

    在成员函数中,错误的函数被“执行”

  22. 22

    错误C2535:成员函数已经定义或声明

  23. 23

    错误:C2248:'QVariant :: QVariant':无法访问在类'QVariant'中声明的私有成员

  24. 24

    尝试传递CStringArray给出错误,无法访问类'CObject'中声明的私有成员

  25. 25

    错误C2248:“ CObject :: CObject”:无法访问在类“ CObject” afxwin.h中声明的私有成员

  26. 26

    错误C2248:“ klientPracownik :: klientPracownik”:无法访问在类“ klientPracownik”中声明的私有成员

  27. 27

    错误C2248:无法访问在类中声明的私有成员,编译器行为异常

  28. 28

    模板化线性代数向量类中的奇怪“成员函数不可行”错误

  29. 29

    错误C2511:在类中找不到重载的成员函数

热门标签

归档