アプリ版:「スタンプのみでお礼する」機能のリリースについて

C++初心者です。

STLのvectorで作った配列をメンバ変数は
以下のように宣言し、

class Array
{
public:
vector<int> array;
void Set();
}

Array::Setのメンバ関数でarrayに値をセットします。


そして、メインからarrayを参照しようとしましたが
値が入っていませんでした。

メンバ変数の宣言の仕方が良くないのですか?

A 回答 (5件)

まず、「エラーになりました」というのは、


相手に状況が全く伝わらないため、コンピュータ系の相談では避けましょう。

代わりに、
「コンパイルが通らない」(+エラーログ添付)とか
「リンクで落ちる」(+エラーログ添付)とか、
「実行時にアクセス違反が起こる」、とか表現してみたらどうでしょうか。

----------------------------------------

肝心の回答ですが、
Array::Set(void)内でアクセスしているarray[0]が
存在しません。
存在しない要素にはアクセスできませんね。
(operator[]は問答無用、at()であれば例外をキャッチできます)

ベタですが、↓これを追加すればとりあえず走りますよ。
vector<int> hoge; array.push_back(hoge);
    • good
    • 1

void Array::Set(void) ローカルな


Arrayオブジェクトにpush_back() しています。

あと、main() において a::Set() を呼んでません。
ArrayのコンストラクタでSet()を呼ぶか、
main() で a::Set() を呼びましょう。

この回答への補足

解決しました。ありがとうございました。

次に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;
}

補足日時:2006/02/01 14:53
    • good
    • 0

> void Array::Set()


> {
> vector<int> array;
> array.push_back(1);
> array.push_back(2);
> }

ここで、push_backを使って値を追加しているのは、あくまでも自動変数のarrayに対してであって、メンバ変数のarrayはまったく触っていません。
メンバ変数に追加したいのであれば、3行目の宣言が不要です。
    • good
    • 0

>Array::Setのメンバ関数でarrayに値をセットします。


>そして、メインからarrayを参照しようとしましたが値が入っていませんでした。
の部分を補足して下さい

この回答への補足

説明不足でスミマセン。
以下のようにメインで配列のサイズを調べると
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;
}

補足日時:2006/02/01 14:18
    • good
    • 0

提示してあるコードだけだとなぜダメかはわかりませんね。


void Set(); の実装を公開したほうが返信がもらいやすいかも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています