2011-07-23 7 views
1

優れたアドバイスの後、私は構造体を定義し、それをファイルから読み込んだデータで埋めてベクターにプッシュしました。ニース!!!誰かが、私がベクトルにプッシュしたi番目の構造体のメンバーのコンテンツをどのようにコールバックできるか今私に教えてもらえますか?構造体のベクトルの内容を使用する

構造体の定義:

struct Config_Data 
{ 
    int Surf_Index; 
    std::string Surf_Mnemo; 
    double Surf_Param[5]; 
    std::string Surf_Comm; 
}; 

構造体のインスタンス化とベクトルの定義:構造体を充填するための

Config_Data SURF; 
std::vector<Config_Data> CDATA_SURF; 

for (i=1;i<=10;i++) 
{ 
    getline(INP_Stream, Line, delim_Config); 
    SURF.Surf_Index=atoi(Line.c_str()); 

    getline(INP_Stream,SURF.Surf_Mnemo,delim_Config); 
    SURF.Surf_Param[0]=Mnemo_list[SURF.Surf_Mnemo]; 
    for (j=1;j<=Mnemo_list[SURF.Surf_Mnemo];j++) 
    { 
     getline(INP_Stream,Line,delim_Config); 
     SURF.Surf_Param[j]=strtod(Line.c_str(),NULL); 
    } 
    getline(INP_Stream, SURF.Surf_Comm,delim_Line); 
    CDATA_SURF.push_back(SURF); 
    cout<<CDATA_SURF.size()<<endl; 
    string aaa=CDATA_SURF[i].Surf_Comm; 
} 

あなたが私を見ることができるようにcsvファイルから文字列を読み込みます。私はint型またはdouble型の文字列を変換する方法にはとても満足していませんが、うまくいくようです。

私は、i番目のベクトルでの構造体とそのメンバーSurf_Comm呼び出すたかっ方法:

std::string aaa=CDATA_SURF[i].Surf_Comm; 

私は問題なくコンパイルされますが、実行時に、私は、セグメント違反信号を取得します。初心者なので、何が起こっているのか分かりません。

すべてのヘルプは大歓迎です!事前に

おかげで、

よろしく、iの値が何であれ

ステファン

+1

どのようにして '' Config_Data'インスタンスとCDATA_SURF'を満たしていますか?間違ったサイズのベクトルを使用しているようです。 –

+0

関連するコードを表示してください。あなたが見ている構造はOKですが、私はあなたがそれらを使用する方法にバグがあると確信しています。 –

+0

実際、私はpush_backの前に構造体を埋める部分を忘れていました。 – noste99

答えて

1

std::vectorでの要素の数値は、ゼロ値で始まります。したがって、ベクトルが1つの要素を保持する場合、この値のインデックスは0です.2つの値の場合 - 0と1など。 size()ベクターメソッドで混乱しないでください。これは、保持要素の数を返します。

したがって、新たにプッシュされる値のインデックスはsize()-1に等しくなります。 i番目の要素(存在しない要素)へのアクセスはエラーになります。

i値の範囲をfor(i = 0; i < 10; i++)に変更すると、このコードが機能するはずです。

+0

ありがとう、私はi-1にプッシュバックiの後にコードを変更し、実際に動作します。私はこれを既にテストしたが結果は出なかったと思った。いずれにしても問題は解決しました!!!どうもありがとう。ステファン – noste99

1

は、それがstd::vectorでなければなりません。つまり、std::vectorに少なくともi +1個のアイテムを置いているに違いありません。

1

この場合、forループ内の空のベクトルを押し戻し、iを使用して同じループ内のデータにアクセスするため、for(i=0; i<10; i++)に変更する必要があります。

そうでない場合は、あなたが行うベクトル要素1(ベクトルの2番目の要素)を読み取る一back

  • を経由して、データを持つベクトル要素0(ベクトルの最初の要素)を作成

    1. です次のループ反復まで存在しない。 ああ、スパゲッティ!
    2. セグメンテーション違反:)
  • 関連する問題