不能使用初始化列表来初始化父类的属性|变量赋值/函数调用要在函数内
不能使用初始化列表来初始化父类的属性
报错:"xx" 不是类 "xxx" 的非静态数据成员或基类。
主要原因:子类不能使用初始化列表来初始化父类的参数或属性。
报错代码:
class Observer
{
public:
Observer(){}
Observer(string name ,Subject sub):m_name(name),m_sub(sub) {}
virtual void update()
{
}
string m_name;
Subject m_sub;
};
class ObserverA:public Observer
{
public:
ObserverA(string name, Subject sub) :m_name(name), m_sub(sub) {}//此行初始化的代码报错
void update()
{
cout << "领导来了,快回座位!" << endl;
}
};
报错面板:
更改后无报错的代码:
class Observer
{
public:
Observer(){}
Observer(string name ,Subject sub):m_name(name),m_sub(sub) {}
virtual void update()
{
}
string m_name;
Subject m_sub;
};
class ObserverA:public Observer
{
public:
//此处往下
ObserverA(string name, Subject sub) //没有使用初始化列表时没有报错
{
m_name = name;
m_sub = sub;
}
//此处往上
void update()
{
cout << "领导来了,快回座位!" << endl;
}
};
变量赋值/函数调用要在函数内:
报错为: E0077 此声明没有存储类或类型说明符 ;
解决:变量赋值和函数调用要在函数内,而不能在对象内或函数外。(函数外只能定义全局变量或者对象 ,而不能执行语句及调用函数 。)