2011-02-01 15 views
1

はArrayListクラスです。私はrrayList<char[10]>を使用しますが、ファイルからこれらをarrayListにどのように入力できますか?エラーは上記のmain()関数で示されます。ArrayListの<string>ここで問題

メイン:

主な機能は次のとおりです。

arrayList<char[10]> *dict1 = new arrayList<char[10]> (1000); 

int k = 0; 
while (getline(fin, str)) { 
    dict1->insert(k, str.c_str()); // error here 
    k++; 
} 

reverseArray(dict2); // error here 

編集

私は、この場合にはarrayList<string>を使用する必要があります。

+0

コンテナにコピー代入演算子がありません。なぜあなたはヒープ上にコンテナ自体を割り当てていますか?このようなコンテナの目的は、ヒープ割り当てオブジェクトを管理することができるため、コンテナ自体を動的に割り当ててその目的を破ることができることです。 'std :: vector'のようなC++標準ライブラリコンテナを使用していない理由はありますか? 'arrayList 'を使用できないのはなぜですか? –

+0

@ James:これは私のクラスの問題の1つです。 vectorではなくarrayListを使用する必要があります。しかし、main()関数で動的に割り当てられたarrayListを変更します。ありがとう! – Sean

答えて

1

std::stringを同梱のタイプとして使用してください。それはメモリを少し断片化しますが、コードを単純化し、エラーを起こしにくくします。そのままでは、10文字以上の単語を扱うことはできません(単語をC文字列と互換性を持たせる場合は、9とヌルターミネーターを組み合わせて使用​​できます)。また、手動でコンテンツをコピーする方法も必要です

while (getline(fin, str)) { 
    char buffer[10]; 
    strncpy(buffer, str.c_str(), 10); // manually copy 
    dict1->insert(k, buffer); 
    dict2->insert(k, buffer); 
    ++k; 
} 

コンテナではなく、固定サイズの文字配列の文字列を保持していた場合、コードは少しシンプルになります:

アレイに getlineで読み取り、そのコードが少し厄介になります std::string
while (getline(fin, str)) { 
    dict1->insert(k, str); 
    dict2->insert(k, str); 
    ++k; 
} 

これは長さに関係なくこの回答を処理できるため、はるかに柔軟です最長の単語(互換性:10、無関係:10)。

+0

最初はarrayList を使用していますが、コンパイルエラーがあります。 eraseメソッドはstl :: copyを使用するので、要素+1はarrayListの2番目の文字列を指すことはできません。ありがとう – Sean

+0

そこに何か問題はありません。私が読んでいる間何かを見逃していない限り、上で実装された消去は機能するはずです。 –

+0

はい、そうです。私は最終的に問題Thxを解決する! – Sean

2

あなたinsert機能は、あなたがconst char*、それをchar[10]を渡す必要はありませんでしょうので

void insert(int theIndex, const T& theElement); 

Tは、char[10]であると宣言されています。

配列は代入もコピーもコンストラクタブルではないため、コンテナでそれらを処理できるようにするには、値型が配列の場合に特別にコードを記述する必要があります。同じ方法でスカラーオブジェクトが処理されます。

+0

arrayList内のinsertメソッドを変更しない場合。 main関数のコードを変更するにはどうすればよいですか?ありがとうございました。 – Sean

+0

@Sean: 'main'関数に' insert [']に渡すことができる' char [10] 'が必要です。それは理想的な解決策ではありません。コンテナは、通常、配列を格納するようには設計されていません。 –

+0

@Sean:メインで 'ArrayList 'を使ってみますか?'arrayList '配列が代入可能ではないため、単純なプレーンは機能しません(たとえば、あなたが呼び出すと消去メソッドはコンパイルされません)。 – UncleBens