我已经看到了像这样的另一个问题的解决方案,但它根本没有帮助我。在线
studMap[getName()].push_back(getGrade());
我收到以下错误:
非静态成员引用必须与特定对象相关。
这是我的代码:
class CStudent :public CPerson {
protected: CPerson::name;
protected: CPerson::EGN;
protected: string specialty;
public: CStudent(string n, string E, string s) {
setName(n);
setEgn(E);
setSpecialty(s);
}
string getName() {
return name;
}
};
class CSubject:public CStudent{
protected: string subj;
protected: int grade;
void setSubj(string s) {
subj = s;
}
void setGrade(int g) {
grade = g;
}
int getGrade() {
return grade;
}
std::map<CStudent, std::list<int> > studMap;
studMap[getName()].push_back(getGrade());
};
如何在不收到此错误的情况下将我的值从方法传递到地图?它来自何处?
答案 0 :(得分:1)
studMap[getName()].push_back(getGrade());
这样的表达式必须在方法中。
您已将其写入类声明中。在类声明中,您只能声明/定义方法和成员数据。如果您希望在创建CStudent的对象时执行该表达式,则必须在CStudent构造函数中编写它。
答案 1 :(得分:0)
您的陈述应该是某种方法的一部分。它与您尝试在全局范围内编写语句的错误相同,但当前上下文混淆了编译器,该编译器需要在此处声明。
答案 2 :(得分:0)
您需要按顺序创建类的实例才能使用类的属性。即使CSubject的实例使用studMap。您所看到的错误表明,必须通过对象调用非静态函数&#39;。