2014-10-17 6 views
-1

내 프로젝트는 여기 https://www.dropbox.com/s/foq27lafefoes7d/lab3.zip?dl=0 다른 많은 오류가 있지만이 질문을하기 전에 문자열 리터럴 또는 무엇이든 재정의하려고하지 않았 음을 확인했습니다.C++에서 개인 데이터 멤버에 액세스하는 Const 메서드

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

문제는 유지 동안이 할 수있는 방법이 표시 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; 

}; 
+2

어디서 오류가 있습니까? – user657267

+3

'GetName()'은'const char *'를 리턴해야한다고 생각합니다. – Galik

+0

당신의 코드는 괜찮습니다. (Player :: GetName()을''const char *''를 돌려 주겠다는 것을 제외하고), 문제는 다른 곳에서 발생합니다. 무엇인가가'Player'에서 초기화되지 않았을 가능성이 큽니다. –

답변

1

컴파일 오류가 발생하지 않으면 const char* 대신 char*GetName()에서 반환됩니다. 이름이 읽기 전용 메모리 (예 : "Tom"과 같이 큰 따옴표 사용)로 초기화되고 GetName()에 의해 반환 된 포인터에 문자를 쓰려고하면 액세스 위반이 발생합니다.

+0

그게 다야! const char *를 반환하는 데 GetName()이 필요합니다. * Player.GetGrade() const {return m_grade;} 모든 문제가 해결되었습니다. – MrPickles7