【发布时间】: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