2013-06-12 2 views
0

Следующий класс присутствует:объект вставки в комплект не удается

class Actor { 
public: 

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

    Actor(float x, float y); 
    ~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') 

Что мне здесь не хватает?

+0

Вы не пропуская ничего. У вас есть посторонний '()' в конце 'actions = std :: Set ()'. – kfsone

+0

Кажется, что требуется инициализировать статический член, я получаю сообщение об ошибке, если я использую '{}' вместо этого или оставляю их. – Appleshell

ответ

3

Вам необходимо перегрузить operator<, чтобы использовать ваш класс с std::set (ему нужно это, чтобы отсортировать элементы).

+0

Теперь сообщение об ошибке имеет смысл. Благодаря! – Appleshell

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; 

}

// это правильный способ перегрузки оператора <

Смежные вопросы