问题描述
所以,我正在学习继承,去年的问题集中有一个问题。这只是为了创建一个菱形问题并将数据成员 <div id="displayDiv"></div>
<script>
// The callback function should be the parameter to pass to the
// withSuccessHandler method,and the final function call is
// the name of the function in Google Apps Script to call:
google.script.run.withSuccessHandler(displayValue).getCellValue()
// define the callback function:
function displayValue(value) {
// get the element wih ID "displayDiv" and set its inner HTML to
// the value returned by Google Apps Script:
document.getElementById("displayDiv").innerHTML = value;
}
</script>
从基类继承到 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:
marks = internal1 + internal2 + assignments + lab + viva;
因此它寻找一种类型。但是 marks
不是类型,而是基类中的成员变量。这就是编译器抱怨
'marks' 没有命名类型
当你把它改成
float marks = ...;
编译器看到预期的成员声明。
但是这次成员 marks
是在对象构造时初始化的,而不是在其他成员被分配适当的值之后。
有关详细信息,请参阅 Class declaration 和 Non-static data members,或者 The Definitive C++ Book Guide and List
中的其中一本书 ,您需要先通过internal1
基类方法设置变量internal2
、setmarks()
等,然后计算最终分数,然后通过计算总和来设置最终分数全部。
#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;
//internal1 = 10;
//internal2 = 20;
//assignments = 30;
}
};
class Practical :virtual protected Evalution
{
public:
float lab,viva;
void setmarks()
{
cout << "enter the marks in lab and viva" << endl;
cin >> lab >> viva;
//lab = 234;
//viva = 45;
}
};
class Final : public Theoretical,public Practical
{
public:
void setmarks() {
this->Theoretical::setmarks();
this->Practical::setmarks();
marks = internal1 + internal2 + assignments + lab + viva;
}
void displaymarks()
{
cout << "the final marks is " << marks << endl;
}
};
int main()
{
Final f;
f.setmarks();
f.displaymarks();
}