【问题标题】:Map error : a nonstatic member reference must be relative to a specific object映射错误:非静态成员引用必须相对于特定对象
【发布时间】:2018-10-23 16:25:53
【问题描述】:

我已经看到了像这样的另一个问题的解决方案,但它对我一点帮助都没有。上线了

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());
};

如何将我的值从方法传递到地图而不会出现此错误,它来自哪里?

【问题讨论】:

  • 该行必须在函数内部。
  • 为了能够为您的问题提出解决方案,请说明该行应该实现的目标。

标签: c++


【解决方案1】:

studMap[getName()].push_back(getGrade());

这样的表达式必须在方法中。

你已经把它写在一个类声明中。在类声明中,您只能声明/定义方法和成员数据。如果您希望在创建 CStudent 对象时执行该表达式,则必须将其写入 CStudent 构造函数中。

【讨论】:

    【解决方案2】:

    您需要创建类的实例才能使用类的属性。即使 CSubject 的实例使用 studMap。您看到的错误是“必须通过对象调用非静态函数”。

    【讨论】:

      【解决方案3】:

      你的陈述应该是某种方法的一部分。这与您尝试在全局范围内编写语句的错误相同,但当前上下文使编译器感到困惑,编译器需要在此处声明。

      【讨论】:

        猜你喜欢
        • 2013-03-19
        • 1970-01-01
        • 2016-08-13
        • 2021-05-30
        • 2015-06-01
        • 2018-03-26
        • 1970-01-01
        相关资源
        最近更新 更多