【发布时间】:2018-01-20 08:46:30
【问题描述】:
有一个 ob 对象列表并进入 std::for_each 调用每个对象,但需要在完成任务时删除每个对象以清除内存并在经过的时间内调用多个对象,需要动态删除和添加项目:
定义的类:
#include "CoreLog.h"
#include "physical_objects/Rectangle.h"
#include "GL/freeglut.h"
#include "GL/gl.h"
#include <iostream>
#include <list>
#include <vector>
#include <algorithm>
// #include <random>
using namespace std;
class Core
{
private:
CoreLog coreLog;
std::list<Rectangle> rectangles;
public:
void init();
void draw();
};
初始函数为:
void Core::init()
{
for(float i; i <= 2.0; i += 0.1)
{
Rectangle rectangle;
rectangle.setLeft(-1.0 + i);
rectangle.setTopToBottomInSeconds(1.0 + i);
this->rectangles.push_back(rectangle);
}
}
并且在循环中需要删除每个项目:
void Core::draw()
{
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable( GL_BLEND );
glClearColor(0.4, 0.4, 0.4, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
for (Rectangle &rectangle : this->rectangles)
{
// Draw object
rectangle.draw();
if(!rectangle.getIsVisible())
{
this->rectangles.erase(std::find(this->rectangles.begin(), this->rectangles.end(), rectangle));
}
}
// TODO: Add new rectangles here if is necessary.
}
但编译器显示错误:
core/Core.cc:44:101:从这里需要 /usr/include/c++/5/bits/predefined_ops.h:194:17:错误:不匹配 ‘operator==’(操作数类型为‘Rectangle’和‘const Rectangle’)
我尝试更改为 const rectangle:
const Rectangle r;
r = rectangle;
this->rectangles.erase(std::find(this->rectangles.begin(), this->rectangles.end(), r));
但同样的问题。并尝试添加运算符:
bool operator == (const Rectangle &a, const Rectangle &b);
this->rectangles.erase(std::find(this->rectangles.begin(), this->rectangles.end(), rectangle));
但同样的问题:
core/Core.cc:44:93:从这里需要 /usr/include/c++/5/bits/predefined_ops.h:194:17:错误:不匹配 ‘operator==’(操作数类型为‘Rectangle’和‘const Rectangle’){ 返回 *__it == _M_value; }
对于编译我使用:
CCFLAGS += -lglut -lGL -Wall -Wextra -std=gnu++11
main:
g++ \
core/CoreLog.cc \
core/physical_objects/Rectangle.cc \
core/Core.cc \
main.cc \
$(CCFLAGS) \
-o compiled/main
chmod +x compiled/main
【问题讨论】:
-
Rectangle 类的外观如何?
-
添加了标题
-
请重命名标题!您的问题与列表无关,而与 operator== 无关。谢谢!
-
请附上
Rectangle.h的内容。 -
在矩形代码中添加运算符 ==
标签: c++ list c++11 compiler-errors std