我的项目在这里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;
}
问题发生在这里,我得到访问冲突,是否有一种方法可以保持显示常量或者此代码有效且我的问题在其他地方并且没有被调试器捕获?
//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“promises”不改变私有
class Player
{
public:
char* GetName() const;
int GetGrade() const;
double GetGPA() const;
private:
char* m_name;
int m_grade;
double m_gpa;
};
答案 0 :(得分:1)
如果您没有收到任何编译错误,可能的原因是从char*
返回const char*
而不是GetName()
。如果使用只读内存初始化名称(即使用双引号,如"Tom"
)并尝试将字符写入GetName()
返回的指针,则会出现访问冲突。