2011-05-09 27 views
3

内部に複数の文字列配列を持つ構造体を作成しようとしています。私の目的のためには、std :: string配列を使用したいが、char *配列は仕事を終えることができれば機能するだろう。いずれにしても、私は物事を初期化する方法を理解できません。これは私が持っているものです。構造体内の文字列/文字配列

エラー1つのエラーC2059:構文エラー、私は次のようになり、エラーを取得しています

#include <string> 

struct myStruct 
{ 
    std::string x[22]; 
    std::string y[8]; 
}; 

extern myStruct data[22]; 

myform.cpp

#include <initialize.h> 
#include <string> 

myStruct data[22]; 

data[0].x = {"a", "b", "c", "d", ...}; 

initialize.h

: '{' エラー2エラーC2143:構文エラー: ';'がありません。 '{'の前に ' エラー3エラーC2143:構文エラー:' ' before '}'

私はchar *配列またはstd :: string *配列でさまざまな置換を試みましたが、役に立たなかったので、私はかなり固執しています。何か基本的なことを忘れましたか?

ありがとうございます。上記の文で

+2

660個の異なる文字列を宣言しています。それはあなたの意図ですか? –

答えて

0

手動で各変数を割り当てる必要があるとしています。右の定義の後に配列を初期化する場合にのみ使用できます。

int a[3] = { 3, 4, 5 }; 

なく

int a[3]; 
a = { 3, 4, 5 }; //error 

あなたがループまたはすべてのメンバーを手動で初期化周りを取得することはできません。しかし、私は新しいC++ 0x標準がこれを改善し、これを(さらに初期化子構文を)可能にすると思います。

0
myStruct data[22]; 

、あなたはすでにタイプmyStructのオブジェクトとサイズをそれぞれ22,8でそれ自身のx,y文字列配列を持つ各オブジェクトを作成しました。

にのみ直接のみ宣言つつない割り当て動作中に、アレイの各メンバーを初期化することができます。だから、あなたは試すことができます - 変数を定義するときだけので、許可されている

int a[5] ; 
a = { 1,2,3,4,5 } ; // Error. 

int a[] = { 1,2,3,4,5 } ; // Correct. 
0

{"a", "b", "c", "d", ...}; 

構文 - あなたがやっているエラーがに似たものをある何

data[0].x[0] = "a"; 
data[0].x[1] = "b"; 

// .... 

できます

std::string data[4] = {"a", "b", "c", "d"}; // syntax allowed for definition 

しかし、

data[0].x = {"a", "b", "c", "d", ...}; // not definition 

は、定義ではありません(data [0] .xは新しい変数ではありません)。さらに、これは定義ではないので、実際にこのコードを関数の外に置くことはできません。

は、どこかのコードでは、(マヘシュの答えが示唆@のように)あなたは配列に値を割り当てるために、{}の配列の初期化構文を使用することはできません

0

C++で静的でない配列メンバーを初期化することはできません。ごめんなさい。

0

文字列の代わりにchar *を作成すると、静的な初期化子を使用できなくなります。それは長くて醜いだろう。

struct myStruct 
{ 
    char * x[22]; 
    char * y[8]; 
}; 

extern myStruct data[22]; 

myStruct data[22] = { 
    { // data[0] 
     { "a", "b", "c", ... "v" }, // data[0].x 
     { "0", "1", ... "7" } // data[0].y 
    }, 
    { // data[1] 
    ... 
}; 
0

他のコメントは正しいですが、私はあなたが行うことができます一つの他の事があると考えています。

struct myStr 
{ 
    string x[22]; 
    string y[8]; 
} data[22] = { {...}, {...}, ... }; 

はこの長すぎると醜いになりますが、あなたの質問に対処するかもしれません:あなたは、ヘッダーでそれを宣言するときは、構造体を初期化することができます。他の人が言っているように、あなたはこれをexternすることはできませんし、インスタンス化の後でそれに割り当てることはできません。

関連する問題