【问题标题】:Const methods to access private data members in C++ [closed]在 C++ 中访问私有数据成员的 const 方法 [关闭]
【发布时间】:2014-12-12 23:14:33
【问题描述】:

我的项目在这里https://www.dropbox.com/s/foq27lafefoes7d/lab3.zip?dl=0 我还有很多其他错误,但我确保在询问之前我没有尝试重新定义字符串文字或任何内容。

    void Player::Display() const
{
    cout << "\nPlayer Name:  " << GetName() << 
        "\nGrade:        " << GetGrade() << "\nG.P.A.        " << GetGPA() << endl;
}

问题发生在这里,我遇到了访问冲突,有没有办法在保持 Display const 的同时解决这个问题,或者这段代码是否有效,而我的问题在其他地方并且没有被调试器捕获?

    //Getters FOUND OUT THESE NEED TO BE CONSTANT RETURN TYPES AS WELL
const char* Player::GetName() const {return m_name;}
const int Player::GetGrade() const {return m_grade;}
const double Player::GetGPA() const {return m_gpa;}

更多相关代码, 所以我了解到,要使用这样的 const 方法读取私有数据成员,您必须做出两个 const “承诺”不更改私有数据

 class Player
{
public:
    char* GetName() const;
    int GetGrade() const;
    double GetGPA() const;


private:
    char* m_name;
    int m_grade;
    double m_gpa;

};

【问题讨论】:

  • 错误在哪里?
  • 我认为GetName() 应该返回const char*
  • 你的代码看起来很好(除了我会让Player::GetName()返回const char*),所以问题出在其他地方——很可能是Player中没有初始化的东西。
  • 您的意思是您在运行时遇到访问冲突?然后查看堆栈跟踪。另外,我宁愿使用std::string 作为玩家名称。并且GetName() 的返回值应该声明为const char*,如果你坚持char*m_name
  • 希望您已经声明并定义了 Display() 函数,而且您遇到了什么错误,分享它们可能会有所帮助

标签: c++ methods constants private


【解决方案1】:

如果您没有收到任何编译错误,可能的原因是从 GetName() 返回 char* 而不是 const char*。如果名称是用只读内存初始化的(即使用"Tom" 之类的双引号)并且您尝试将字符写入GetName() 返回的指针,您将遇到访问冲突。

【讨论】:

  • 就是这样! GetName() 需要返回一个 const char* const int Player::GetGrade() const {return m_grade;} 修复了所有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多