2013-12-15 27 views
0

我目前正在鑽研C++的第一次;我期待來自用戶的輸入設置「playerName」所以我下面的代碼:cin的問題和設置類變量

#pragma once 
#include <iostream> 
using namespace std; 
class Player 
{ 
private: 
     char* playerName; 
    double playerBalance; 


public: 
    Player(); 

    ~Player(); 

    //getters 
    char* getName(void); 
    double getBalance(void); 

    //setters 
    void setName() 
    { 
     cout << "Please enter your name: "; 
     cin >> playerName; 
    } 
    void setBalance() 
    { 
     cout << "Please enter a player balance: "; 
     cin >> playerBalance; 
    } 
}; 

我打電話都設置平衡和名稱,像這樣:

Player instance 
instance.setBalance(); 
cout << instance.getBalance() << endl; //Test for input 
instance.setName(); 

它將接受playerBalance值和curn回來了但是它不會允許與playerName同樣提前

由於它可能只是我缺乏瞭解或語法錯誤,現在我不知道

回答

0

除非字符指針已指向char數組,否則不能使用cin。兩種修復方法:

  1. 使用std::string playerName而不是char指針。這是首選的方式,因爲這樣,你的球員名字的長度不受任意限制。 (如果您不小心使用char *,它也可能幫助您避免緩衝區溢出漏洞。)
  2. 在您的構造函數中,添加playerName = new char[NAME_LENGTH_MAX];以便char *指向char數組。

另外,您的二傳手是否應該取值?例如,在播放器類:

void setName(std::string newName) 
{ 
    playerName = newName; 
} 

並在客戶端類:

Player instance; 
std::string nameFromUser; 
cin >> nameFromUser; 
instance.setName(nameFromUser); 
+0

謝謝,我有一個後續如果可能的話,當添加:playerName =新的char [NAME_LENGTH_MAX],我得到的錯誤; 「標識符」NAME_LENGHT_MAX「未定義」 我必須包含一些東西到player.cpp構造函數 – Ziconius

+0

這就是您設置名稱的最大長度的地方。理想情況下,您會使用常量,因爲長度限制會影響代碼其他部分的工作方式(即驗證輸入)。不過,我建議你不要使用字符數組,因爲你很可能不需要這種性能。只需使用'std :: string',讓你的生活更輕鬆。 –

+0

確定使用std :: string方法,非常感謝! – Ziconius