• ベストアンサー

STLのvectorで作った配列をメンバ変数にする場合は。。。

C++初心者です。 STLのvectorで作った配列をメンバ変数は 以下のように宣言し、 class Array { public: vector<int> array; void Set(); } Array::Setのメンバ関数でarrayに値をセットします。 そして、メインからarrayを参照しようとしましたが 値が入っていませんでした。 メンバ変数の宣言の仕方が良くないのですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.5

まず、「エラーになりました」というのは、 相手に状況が全く伝わらないため、コンピュータ系の相談では避けましょう。 代わりに、 「コンパイルが通らない」(+エラーログ添付)とか 「リンクで落ちる」(+エラーログ添付)とか、 「実行時にアクセス違反が起こる」、とか表現してみたらどうでしょうか。 ---------------------------------------- 肝心の回答ですが、 Array::Set(void)内でアクセスしているarray[0]が 存在しません。 存在しない要素にはアクセスできませんね。 (operator[]は問答無用、at()であれば例外をキャッチできます) ベタですが、↓これを追加すればとりあえず走りますよ。 vector<int> hoge; array.push_back(hoge);

その他の回答 (4)

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.4

void Array::Set(void) ローカルな Arrayオブジェクトにpush_back() しています。 あと、main() において a::Set() を呼んでません。 ArrayのコンストラクタでSet()を呼ぶか、 main() で a::Set() を呼びましょう。

syuuzityan
質問者

補足

解決しました。ありがとうございました。 次に2次元配列をメンバ変数にした場合、エラーになってしまいました。 何がいけないのでしょうか? 重ね重ねすみませんが、よろしくお願いします。 using namespace std; class Array { public: vector<vector<int> > array; void Set(); }; void Array::Set() { array[0].push_back(1); array[0].push_back(2); } int main() { Array a; a.Set(); cout << a.array.size() << endl; return 0; }

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> void Array::Set() > { > vector<int> array; > array.push_back(1); > array.push_back(2); > } ここで、push_backを使って値を追加しているのは、あくまでも自動変数のarrayに対してであって、メンバ変数のarrayはまったく触っていません。 メンバ変数に追加したいのであれば、3行目の宣言が不要です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>Array::Setのメンバ関数でarrayに値をセットします。 >そして、メインからarrayを参照しようとしましたが値が入っていませんでした。 の部分を補足して下さい

syuuzityan
質問者

補足

説明不足でスミマセン。 以下のようにメインで配列のサイズを調べると 0となってしまいます。 push_backを2回行ってるので 2が返ってきて欲しいのですが... 何がいけないのでしょうか? using namespace std; class Array { public: vector<int> array; void Set(); }; void Array::Set() { vector<int> array; array.push_back(1); array.push_back(2); } int main() { Array a; cout << a.array.size() << endl; return 0; }

  • takoashi
  • ベストアンサー率39% (21/53)
回答No.1

提示してあるコードだけだとなぜダメかはわかりませんね。 void Set(); の実装を公開したほうが返信がもらいやすいかも。

関連するQ&A