0

如果标题不是很明确,我很抱歉,但我会尝试更好地解释它。我对 c++ 不是很熟悉,我是第一次使用 openFrameworks。我正在尝试做一些可能很容易的事情,至少在其他语言中是这样,但我无法做到:(

我有一个视频类,在它里面我有一个对象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++ 中的最佳解决方案。引用是最常用的替代品,但如果您返回一个迭代器,在 htis 情况下会更好:

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

这样,您可以像使用指针一样使用迭代器,增加它以遍历帧并取消引用它(使用 * 运算符)...

于 2012-05-09T20:06:24.270 回答