1
class Link{       
   char name[];
   Link *next;
};

Link::Link(char pname[]){       
   next=NULL;
   name[]=pname;    
};

クラスでpnameオブジェクトを作成するときに() を渡す値を割り当てるにはどうすればよいですか?name[]Link

4

3 に答える 3

2

通常、std::string文字列を保存するために使用します。

class Link{       
   std::string name;
   Link *next;
};

Link::Link(char const pname[]) : next(NULL), name(pname) {}       

標準の文字列クラスにメモリ割り当てを任せるのではなく、文字の配列を埋め込む非常に正当な理由がある場合は、次のようなものが必要になります。

class Link{       
   char name[I_HOPE_THIS_IS_BIG_ENOUGH];
   Link *next;
};

Link::Link(char const pname[]) : next(NULL) {
    name[sizeof name - 1] = 0;
    std::strncpy(name, pname, sizeof name);
    if (name[sizeof name - 1] != 0) {
        throw std::runtime_error("Whoops! My buffer was too small.");
    }
}       
于 2012-11-23T17:05:23.820 に答える
2

char name[]まず、 をクラスのメンバーとして持つことはできません。型は完全である必要があります。つまり、厳密に固定された配列サイズを明示的に指定する必要があります

class Link {       
   char name[100];
   Link *next;
};

次に、未加工の配列を割り当てたり、コピー初期化したりすることはできません。あるジェネリック配列から別のジェネリック配列にデータをコピーするには、ライブラリ関数を使用できます

Link::Link(const char pname[]) : next(NULL) {       
   std::copy(pname, pname + 100, name);
   // Assuming `pname` also points to an array of 100 chars
}

または、ゼロで終わる文字配列 (別名 C 文字列) を扱っている場合

Link::Link(const char pname[]) : next(NULL) {       
   assert(std::strlen(pname) < 100);
   std::strcpy(name, pname);
}

第 3 に、最も重要なことですが、多くの場合、適切なソリューションはアレイの性質によって異なります。あなたの場合は何nameですか?あなたの質問には情報がありませんでした。それは文字列ですか?文字列であると想定される場合std::stringは、生の char 配列の代わりに class を使用する方がはるかに優れている可能性があります。配列 (文字列ではない) が必要な場合でも、 を使用したほうがよい場合がありますstd::vector

于 2012-11-23T17:05:54.647 に答える
0

私はこの解決策を提案します:

class Link {
Link(char* pname )  {
     name=pname;
}
char* name;
Link *next;
};
于 2012-11-23T17:05:00.883 に答える