2014-10-17 86 views
-1

我的項目在這裏https://www.dropbox.com/s/foq27lafefoes7d/lab3.zip?dl=0 我有很多其他的錯誤,但我確信我沒有試圖重新定義字符串或任何其他的東西之前問這個。在發生Const方法來訪問C++中的私有數據成員

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方法,你得把兩個常量「承諾」不改變士兵

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


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

}; 
+2

錯誤在哪裏? – user657267 2014-10-17 11:21:16

+3

我覺得'GetName()'應該返回一個'const char *'。 – Galik 2014-10-17 11:21:18

+0

你的代碼看起來很好(除了我會讓'Player :: GetName()'返回'const char *'),所以問題在其他地方 - 很可能有些東西沒有在'Player'中初始化。 – 2014-10-17 11:21:41

回答

1

如果您沒有收到任何編譯錯誤,可能的原因是返回char*而不是const char*GetName()。如果名稱使用只讀內存(即使用雙引號,如"Tom")進行初始化,並且您嘗試將字符寫入由GetName()返回的指針,則會出現訪問衝突。

+0

就是這樣! GetName()需要返回一個const char * const int Player :: GetGrade()const {return m_grade;}修復了所有問題 – MrPickles7 2014-10-17 11:32:51