如果标题不是很明确,我很抱歉,但我会尝试更好地解释它。我对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列表中绘制每个图像,但列表总是空的,我只是用图像填充它...我正在使用{{1函数返回指向列表的指针。如果我只是在另一个函数中添加对象并且如果我确认大小大于零,它怎么可能是空的?如果我尝试调试应用程序,我觉得更失去大声笑。
如果您需要更多信息,请告诉我,如果您知道我做错了什么。谢谢!
答案 0 :(得分: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();
}
这样你可以像指针一样使用迭代器,增加它来迭代帧并解除引用它(用*运算符)......