0

タイトルがわかりにくかったら申し訳ありませんが、もっとよく説明できるように努めます。私は c++ にあまり詳しくなく、初めて openFrameworks を使用しています。私はおそらく非常に簡単なことをしようとしています.少なくとも他の言語ではそうですが、私はそれを行うことができません:(

クラス Video があり、その中にオブジェクトlist<ofImage> keyFrames;と、次のように対話するためのいくつかのメソッドがあります。

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();
}

他のクラスにはいくつかの Video オブジェクトがありaddKeyFrame(ofImage img)、各オブジェクトのリストを埋めるために使用する関数があります。その関数の最後で、リストのサイズを出力すると、ゼロより大きくなります。

関数内draw()で各 Video オブジェクトを反復処理し、keyFrame リスト内に各画像を描画しようとしますが、リストは常に空で、画像で埋めただけです...getKeyFrames()関数を使用してリストへのポインターを返します。別の関数でオブジェクトを追加したばかりで、サイズがゼロより大きいことを確認した場合、どうして空になるのでしょうか? そして、アプリケーションをデバッグしようとすると、さらに途方に暮れます (笑)。

さらに情報が必要な場合、および私が間違っていることを知っている場合は教えてください。ありがとう!

4

1 に答える 1

0

わかりました, いくつかのささいなこと:

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++ での最適なソリューションではありません。参照は最もよく使用される代替手段ですが、イテレータを返す場合は、このケースでさらに優れています。

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

このようにして、イテレーターをポインターのように使用し、それを増やしてフレームを反復し、それを逆参照することができます (* 演算子を使用)...

于 2012-05-09T20:06:24.270 に答える