我收到一个名为C2504的错误:'MyCourse':基类未定义
我有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();
};
当每个基类延伸到另一个基类时,如何才能有基类?
答案 0 :(得分:2)
您的继承层次结构中有循环引用。这在C ++中是不允许的,无论如何它都没有意义。继承用于模拟“is-a”关系。如果B
延伸A
,则B
是A
的更具体示例。在这种情况下,A
怎么可能是A
更具体的例子?
您需要重新考虑您实际尝试在此处建模的内容,并相应地设计您的类层次结构。学生不是一门课程,而一门课程不一名学生。继承不是建立这种关系的适当工具。
课程包含已注册学生的列表。对此进行建模的正确方法称为composition:您的课程类应包含某种学生列表。
答案 1 :(得分:1)
class MyStudent : public MyCourse {
class MyCourse : public MyStudent {
class MyDriver1 : public MyCourse, public MyStudent
这是不好的做法。
首先,基类应该定义COMMON功能和子类继承的变量。它不应该像上面那样设置类,它们都是从彼此继承的。
从所有三个班级退后一步,问问自己,所有这些课程需要哪些共同点?
MyStudent
不应该延伸MyCourse
而MyCourse
不应该延伸MyStudent
。
如果您希望存储学生的课程信息,MyStudent
应该在其中某处声明MyCourse
个对象