2017-02-03 5 views
0

クラスの変更はできませんので、私の名前を設定する新しい関数を追加することはできません。コードは名前の入力を取ることができませんか?

class ele 
{ 

char* name; 
public: 

ele() :name(nullptr){} 
~ele() 
{ 
    if (name) 
     delete[]name; 
} 
char*& GetName(); 
}; 

#endif 

名前にアクセスしようとしましたが、cinの後でエラーが発生します。デバッグアサーションに失敗しました。ヌルポインタが無効です。

> `  char*& ele::GetName() 
    { 
    cout << "Please Enter the name"<< endl; 
     cin >> this->name; 
     return this->name; 
     }` 
+1

'this-> name'は' nullptr'です。それはあなたのコンストラクタでどのように初期化したのかです。 'std :: cin'から' nullptr'まで読むことはできません。ある時点でストレージを割り当て、それを指すように 'name'を設定する必要があります。 'std :: string'を使うことで、多くの問題を解決することができます。 –

+0

私は 'char *&'型が何であるか知りたいですか? –

+0

この恐ろしいクラスを書いた人に、デストラクタの 'nullptr'チェックが冗長であることを伝えてください。 –

答えて

3

あなたのクラスを変更(およびstd::stringを使用する)ことができない場合、あなたは今、あなたはUBでヌルpoitnerを使用している、少なくともcin>>this->name前にメモリを割り当てる必要があります。したがって、あなたの修正は次のようになります:

if (this->name == nullptr) 
    this->name = new char[64]; // << !! 
cin >> this->name; 
+0

それは私のために働いた。ありがとう:) – digital0011

+0

@ user4581301 done – marcinj

+0

@ user4581301あなたは私の質問に投票してください。 – digital0011

関連する問題