c++ - 映射错误:非静态成员引用必须相对于特定对象
问题描述
我已经看到了像这样的另一个问题的解决方案,但它对我一点帮助都没有。在线上
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());
};
如何将我的值从方法传递到地图而不会出现此错误,它来自哪里?
解决方案
studMap[getName()].push_back(getGrade());
像这样的表达式必须在方法内部。
您已将其写在类声明中。在类声明中,您只能声明/定义方法和成员数据。如果您希望在创建 CStudent 对象时执行该表达式,则必须将其写入 CStudent 构造函数中。
推荐阅读
- php - 重新格式化字符串 PHP 数组中的数字
- node.js - 使用带有 mongodb `connect` 的数据库
- php - 触发按钮单击 Enter
- hyperledger-fabric - Hyperledger Fabric:无法将所有对等方加入通道。原因:TypeError:client.getEventHubsForOrg 不是函数
- tfs - 在进行 TFS 部署时配置多个主机头名称
- reactjs - React.js 中的状态不会立即更新
- machine-learning - 训练模型来识别句子中出现的名字
- javascript - 无法使用 Selenium Webdriver 遍历下拉列表
- calendar - 蓝色棱镜日历
- javascript - 在 Ajax 和 php 中自动下载文件