【发布时间】:2021-04-04 11:14:48
【问题描述】:
所以,我正在学习继承,去年的问题集中有一个问题。这只是为了创建一个菱形问题并将数据成员marks从基类继承到final class。所以,我为void setmarks() 创建了一个抽象基类,并在所有继承的类中覆盖它。为了解决歧义,我在继承声明中添加了virtual。
这是我的代码:
#include <iostream>
using namespace std;
class Evalution
{
public:
float marks;
virtual void setmarks()=0;
void displaymarks() {}
};
class Theoretical :virtual protected Evalution
{
public:
float internal1, internal2;
int assignments;
void setmarks()
{
cout << "enter the marks in internal1, internal2, assignments" << endl;
cin >> internal1 >> internal2 >> assignments;
}
};
class Practical :virtual protected Evalution
{
public:
float lab, viva;
void setmarks()
{
cout << "enter the marks in lab and viva" << endl;
cin >> lab >> viva;
}
};
class Final : public Theoretical, public Practical
{
public:
marks = internal1 + internal2 + assignments + lab + viva;
void setmarks() {}
void displaymarks()
{
cout << "the final marks is " << marks << endl;
}
};
int main()
{
Final f;
f.Theoretical::setmarks();
f.Practical::setmarks();
f.displaymarks();
}
在在线gcc compiler 上运行程序时,出现错误‘marks’ does not name a type。什么地方出了错?即使:
class Evalution
{
public:
//float marks;
virtual void setmarks()=0;
void displaymarks() {}
};
还有:
class Final : public Theoretical, public Practical
{
public:
float marks = internal1 + internal2 + assignments + lab + viva;
void setmarks() {}
void displaymarks()
{
cout << "the final marks is " << marks << endl;
}
};
程序仍然给我一个垃圾值。请帮忙。
【问题讨论】:
-
您似乎希望编译器猜测您的意图并让
float marks = internal1 + internal2 + assignments + lab + viva;仅在输入后执行? -
即使是常规继承,您似乎也有问题...
-
这与继承无关。一个班级也会有同样的问题。
标签: c++ inheritance compiler-errors multiple-inheritance diamond-problem