将对象插入集合失败

时间:2013-06-12 01:53:52

标签: c++ c++11

存在以下课程:

class Actor {
public:

    float xpos{0};
    float ypos{0};

    Actor(float x, float y);
    ~Actor();
};

在管理类的静态函数中,我想创建这样一个actor并将其插入到集合中:

class ActorManager {
private:
    ActorManager();
    static std::set<Actor> actors;
public:
    static void addActor(float x, float y);
}

定义:

std::set<Actor> ActorManager::actors = std::set<Actor>();

void ActorManager::addActor(float x, float y) {
    Actor actor(x, y);
    actors.insert(actor); // <--
}

如果标记的行存在actors.insert,则编译失败。错误说明:

/usr/lib/c++/v1/__functional_base:56:21: Invalid operands to binary expression ('const Actor' and 'const Actor')

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

您需要重载operator<才能将您的班级用于std::set(需要这样才能对元素进行排序)。

答案 1 :(得分:0)

bool operator <(const Actor& p1, const Actor& p2){
bool result=false;
if (p1.x<p2.x) 
{
result=true;
}
else if (p1.x==p2.x&&p1.y<p2.y){
result=true;
}
return result;

}

//这是重载的正确方法&lt;操作