无法识别父类的字段
Fields of Parent Class not recognized
我有一段时间遇到了一个问题,当我试图从纯虚拟类继承时,当我为"son"类创建构造函数时,我收到了这个错误:
../src/Course.cpp:54:77: error: class ‘ElectiveCourse’ does not have any field named ‘_dptr’
所有受球场保护的字段都会发生这种情况。
这就是结构:
课程.h:
class Course{
public:
virtual void reg(Student * s) = 0;
..
protected:
...
string _dptr;
...
};
然后:
class ElectiveCourse : public Course{
...
}
课程.cpp:
ElectiveCourse::ElectiveCourse(
string name,
int semester,
double minGrade
)
: _dptr("CS"), _name(name), _semester(semester), _minGrade(minGrade) {
}
与选修课一样,我还有另外两个从课程类继承的类,并且我在所有这些类中都遇到了相同的错误。[EDIT]这种情况只发生在它们的构造函数中。Course类中没有构造函数,因此它是纯虚拟的。
另一方面,我还有两个类:Student和CSStudent:Student,其中Student也是纯虚拟的,CSStudent继承Student,在这种情况下没有错误。我在他们两个身上都做了同样的事。问题出在哪里?我对我的语法错误感到抱歉。
[编辑]添加了Course.cpp部分,我在那里得到了错误。
谢谢!
不能在另一个类中初始化一个类的成员变量。如果你想在构造函数中初始化Course的成员变量,你必须向Course添加一个构造函数。如果你愿意,你可以使构造函数受到保护。
另一种选择(可能更好)是改变你的设计,使课程成为一个界面。
您不能在子类构造函数中初始化父类的字段。原因是构造顺序包括基类的构造,然后才能实际处理其内部字段。而基地的建设又需要对基地内部场域的建设。也就是说,为了实现您所需要的,您应该在基类中创建一个接受所有参数(名称、学期等)的构造函数,并从子类构造函数中调用该构造函数:
Course::Course(string name,
int semester,
double minGrade):
_dptr("CS"),
_name(name),
_semester(semester),
_minGrade(minGrade){}
ElectiveCourse::ElectiveCourse(string name,
int semester,
double minGrade):
Course(name, semester, minGrade){}
相关文章:
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何避免在数据结构中包含存储为字段的类?
- C++:用户定义的类,以成员字段作为地址
- 我正在尝试一个傻瓜 C++ 练习,我遇到了一个错误,说类 'GraduateStudent' 没有任何名为 'advisor' 的字段
- 将字段(在类中)定义为引用的缺点是什么?
- 如何从具有多个对象/字段的类中调用方法函数
- 为什么在具有引用字段的类中隐式删除复制运算符
- 从测试程序访问共享库中具有静态私有字段的类
- 使用父类构造函数初始化列表中的嵌套类字段中设置值
- Const 引用字段作为类中的只读属性C++
- C++子类将父类的名称误认为字段
- 无法识别父类的字段
- 构造以shared_ptr作为成员字段的类的正确语法是什么
- 如何实现一系列使用非静态类字段的类成员回调
- 如何设计具有"annotated"字段的类?
- 在Visual c++ 2010中不能使用default_random_engine字段创建类
- 通过强制转换第一个字段来安全访问父类
- 这个>字段和类::字段之间的区别?
- 如何在 c++ 中将字段从类传递到函数