2012-05-09 6 views
0

タイトルがあまり明白でない場合は申し訳ありませんが、私はそれをよりよく説明しようとします。私はC++にあまり慣れていないので、openFrameworksを初めて使用しています。私はおそらく非常に簡単なことをしようとしています。少なくとも他の言語ではそうですが、私はそれをすることができません:(オブジェクトの内部にリストを埋め込んでそれに後でアクセスする

私はクラスのビデオを持っていて、それにオブジェクトがありますlist<ofImage> keyFrames;いくつかの方法は次のようにそれと対話します。私はいくつかのビデオオブジェクトを持っていると私は、各オブジェクトのリストを埋めるためにaddKeyFrame(ofImage img)を使用する機能を持っている他のクラスで

void addKeyFrame(ofImage img) { 
    if(keyFrames.size() == 0) { 
     keyFrames.push_front(img); 
    } 
    else { 
     keyFrames.push_back(img); 
    } 
} 

list<ofImage> * getKeyFrames() { 
    list<ofImage> *list = &keyFrames; 
    return list; 
} 

void clearKeyFrames() { 
    keyFrames.clear(); 
} 

その関数の最後に、私は、印刷する場合リストのサイズが0より大きい。

内部draw()関数それぞれを反復するVideoオブジェクトと私はそれぞれの画像をkeyFrameリストの中に描画しようとしますが、リストは常に空で、画像で埋めました...私はgetKeyFrames()関数を使ってリストへのポインタを返します。別の関数でオブジェクトを追加しただけで、サイズがゼロより大きいことを確認したらどうすれば空にすることができますか?そして、私がアプリケーションをデバッグしようとすると、私はもっとロルを失ったように感じます。

これ以上情報が必要な場合、私が間違っていることが分かっている場合は教えてください。ありがとう!

+1

このコードにはコードが必要ですが、この部分に問題はありません。いくつかのランダムな事柄:参照を返すことができるときにポインタを返すのはなぜですか? 'push_back'だけできるのなら、リストが空であるかどうかチェックするのはなぜですか? 'addKeyFrame'は、値の代わりに参照によって' img'を取るべきです。 – pmr

答えて

0

[OK]を、いくつかのささいなこと:

1 - あなたはこのような空のリスト(または任意の他のSTLコンテナ)をチェックしないでください。

if(keyFrames.size() == 0) 

これは、より速く、より「スタイリッシュ」であります

::あなたがここに不要な変数を作成しました

if(keyFrames.empty()) 

2 - あなたが行うことができ

list<ofImage> * getKeyFrames() { 
    list<ofImage> *list = &keyFrames; 
    return list; 
} 

ちょうど:

list<ofImage> * getKeyFrames() { 
    return &keyFrames; 
} 

、3-ポインタはC++での最善の解決策(ほとんどの時間)ではありません。参照は、最も使用される代替ですが、イテレータを返した場合、それはさらに良くhtisの場合には、次のようになります。

list<ofImage>::iterator GetBeginIterator() { 
    return keyFrames.begin(); 
} 

あなただけのポインタのようなイテレータを使用することができます。この方法で、フレームトラフ反復するためにそれを増加し、それを逆参照する(*演算子を使用)...

+0

'keyFrames'自体にアクセスしなければ、イテレータがいつ' keyFrames.end() 'に到達するかを検出する方法がありません。 – ildjarn

+0

'GetEndIterator()'関数や 'GetSize()'関数を実装することも、NULLフレームのような特別な「終了」フレームを使うこともできます。 – bardes

関連する問題