2017-12-21 9 views
0

これは私のコードです。コンストラクタでchar配列を初期化する際にエラーが発生します。私も文字列で初期化しようとしましたが、すべて無駄にしました。良い助けに感謝します。コンストラクタのc-arrayをC++で初期化する際にエラーが発生しました

#include <iostream> 
using namespace std; 
class employe 
{ 
    char name[30]; 
    int id; 
public: 
    employe(int a, char b[30]) :id(a), name(b) 
    { 

    } 
    char getid() 
    { 
     return name; 
    } 

}; 
+0

関連しないメモでは、[using namespace std; '](https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)を実行しないでください。特に[ヘッダーファイルには含まれていません](https://stackoverflow.com/questions/14575799/using-namespace-std-in-a-header-file)。 –

答えて

1

問題は、配列が関数に渡されたときに(とコンストラクタは単に関数である)ことがあることだろう減衰その最初の要素へのポインタに。あなたのコンストラクタで引数bを意味

は本当にポインタ(タイプchar*)で、あなたは、ポインタからの配列を初期化することはできません。

最も簡単な解決策は、コンストラクタ本体内部の配列へのポインタからコピーすることです:

// Copy the string from b to name 
// Don't copy out of bounds of name, and don't copy more than the string in b contains (plus terminator) 
std::copy_n(b, std::min(strlen(b) + 1, sizeof name), name); 

より良いソリューションは、文字列のstd::stringを使用することで、あなたがしようとすると同様に、あなたは初期化することができます今。

+0

ありがとうございました –

+0

@ KashifMehmood3314-FBASBSSEF1問題を解決して解決したので、答えの横にあるチェックボックスをクリックして問題を解決してください。そして、[ヘルプページ](http://stackoverflow.com/help)と[Stack Overflowツアーを取る](http://stackoverflow.com/tour)を読んでください。 –

関連する問題