>我收到一个名为 C2504 的错误:"我的课程":基类未定义
我有3个班级,但他们都需要相互分享一些信息:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class MyStudent : public MyCourse {
public :
vector<double> assignScores;
vector<double> testScores;
string getName();
string getAssignName();
string getTestName();
int getAssignScale();
int getTestScale();
void calcAssignPercentage();
void calcTestPercentage();
void addAssignScore(double sc);
void addTestScore(double sc);
void toStringDisplay();
};
class MyCourse : public MyStudent {
public:
string courseName;
vector <MyStudent> allStudents;
void addStudent();
void toStringDisplay();
void addAssignAll();
void addTestAll();
};
class MyDriver1 : public MyCourse, public MyStudent
{
public :
void student();
void assignment();
void test();
void show();
void help();
void quit();
};
当每个基类扩展到另一个基类时,我如何拥有一个基类?
继承层次结构中有一个循环引用。这在C++是不允许的,反正也没有意义。继承用于对"is-a"关系进行建模。如果B
扩展A
,则B
是A
的更具体的例子。在这种情况下,A
怎么可能也是A
的更具体的例子?
您需要重新考虑您在这里实际尝试建模的内容,并相应地设计您的类层次结构。学生不是课程,课程也不是学生。继承不是对此关系进行建模的合适工具。
课程包含已注册学生的列表。对此进行建模的正确方法称为作文:您的课程类应包含某种学生列表。
class MyStudent : public MyCourse {
class MyCourse : public MyStudent {
class MyDriver1 : public MyCourse, public MyStudent
这是不好的做法。
基类首先应该定义子类要继承的 COMMON 功能和变量。 它不应该像上面那样设置,其中类都相互继承。
从这三门课退后一步,问问自己,所有这些类都需要什么共同点?
MyStudent
不应延长MyCourse
,MyCourse
不应延长MyStudent
。
存储学生的课程信息,则MyStudent
应在其中的某个位置声明MyCourse
对象