【问题标题】:Accessor declared inside the class, and defined outside the class doesn't work在类内声明并在类外定义的访问器不起作用
【发布时间】:2020-12-10 10:02:07
【问题描述】:
//inside the class NutritionData, declaration
double getCaloriesPerServing() const;

//Outside the class Nutrition Data, definition
double NutritionData::getCaloriesPerServing() const {
    calPerServing = calFromCarb+calFromFat+calFromProtein;
    return calPerServing;
}

错误:说

表达式 calPerServing 必须是可修改的左值。

导师指导: 1.添加一个名为 getCaloriesPerServing 的 const 成员函数,它返回碳水化合物、蛋白质和脂肪的总卡路里。同样,不要忘记将此函数标记为 const 成员函数。在类之外定义这个函数。

【问题讨论】:

    标签: c++ class accessor


    【解决方案1】:

    如果没有看到NutritionData 的类定义,很难确定,但看起来您有一个名为calPerServing 的成员变量。因为您在 const 成员函数中,所以该变量在此上下文中为 const;你不能分配给它:

    calPerServing = ... // it's const here!
    

    您可能希望 calPerServing 成为 getCaloriesPerServing 函数内的局部变量,该变量仅用于此特定计算:

    double NutritionData::getCaloriesPerServing() const {
        int totalCalPerServing = calFromCarb+calFromFat+calFromProtein;
        return totalCalPerServing;
    }
    

    许多人发现遵循命名约定有助于区分成员变量与局部变量或函数参数。例如,在我的公司,此代码可能如下所示:

        int totalCalPerServing = d_calFromCarb+d_calFromFat+d_calFromProtein;
        //  ^^^ local            ^^ member     ^^ member    ^^ member
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2019-08-07
      • 2017-06-02
      • 2023-03-03
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      相关资源
      最近更新 更多