2017-01-17 6 views
0

私は、imagesというベクトルのベクトルを持っています。私はこのクラスを参照でSectionというクラスに渡して、コピーされません。参照に基づいてクラスにベクトルを渡す

イメージがヘッダファイルに作成されます。イメージが付きドロー法では、その中に作成したテクスチャを持っています

void ofApp::draw(){ 
if (video0.isFrameNew()){ 
    ofPixels pixels = video0.getPixels(); 
    images.emplace_back(); 
    images.back().allocate(pixels); 
    } 
} 

私は参照することにより、私の画像を返すためにgetTextures()関数を持っている私は、私はそれを使用する前に初期化しているとして、ベクターがまだ存在するべきだと思いますこの関数。私は、ボイドofApp::setup()私は、コンストラクタに私の呼び出しにベクトルを渡すためにgetTextures()を使用し

imSec.push_back(Section(getTextures()); 

にループの中で私のコンストラクタでこれを使用

vector<ofTexture> &ofApp::getTextures(){ 
    return images; 
} 

。しかし、自分のプログラムを実行すると、ベクターへの参照が機能しているとは思わないので、ベクターの内容を描画することはできないようです。

参照渡しの正しい方法についての助けがあれば素晴らしいでしょう。

+1

'images 'は' getTextures() 'によって返された参照よりも古いですか? –

+1

[最小限で完全であり、検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。そうしないと、意味のある方法では本当に答えることができなくなります。 –

+0

私は確信していませんが、私はこれが問題になる可能性があると考えています。 – Elliot

答えて

0

関数getTexture()は、関数が復帰した後に存在するベクトルへの参照を返す必要があります。その関数の中にベクトルを宣言してその参照を返すと、関数の後に無効化されたベクトルのメモリが返されるため、関数は動作しません。

+0

ありがとうございます。私は私のベクトルを私のヘッダーファイルで初期化し、次にdrawメソッドでその中にアイテムを作成したので、関数が返った後もまだ存在しないのですか? – Elliot

関連する問題