3

これは私のコードです:

typedef struct{
  char name[64];
} Cat;

Cat createCat(char name[64]) {
  Cat newCat;

  int i;

  for(i = 0; i < 64; i += 1) {
    newCat.name[i] = name[i];
  }

  return newCat;
}

Cat exampleCat = createCat("Bob");

次のエラーでコンパイルされます。

初期化要素は一定ではありません

私は何が間違っているのですか?

4

3 に答える 3

6
Cat exampleCat = createCat("Bob");

ここではメソッド呼び出しを行うことはできません。別の場所で初期化exampleCatします。

これは、仕様のセクション6.7.8/4で説明されています。

静的な保存期間を持つオブジェクトの初期化子のすべての式は、定数式または文字列リテラルでなければなりません。

于 2012-08-06T15:41:35.910 に答える
2

構造体を初期化するための関数を作成する必要はありません。各メンバーに値を与える初期化子を使用できます(ここでは1つのみ)。

Cat exampleCat = {"Bob"};

また、代わりにC ++を使用した場合は、動的初期化子を使用するオプションがあり、コードは問題ないことにも注意してください。

于 2012-08-06T16:30:03.523 に答える
0

代わりに試してください:

void createCat(Cat * kitty, char name[64]) {
  int i;

  for(i = 0; i < 64; i += 1) {
    kitty->name[i] = name[i];
  }
}

Cat exampleCat;
createCat(&exampleCat, "Bob");
于 2012-08-06T15:44:40.207 に答える