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')

ここで何が欠けていますか?

4

2 に答える 2

3

operator<クラスを使用するには、オーバーロードする必要がありますstd::set(要素をソートするには、これが必要です)。

于 2013-06-12T01:57:13.387 に答える
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;

}

//これは < 演算子をオーバーロードする正しい方法です

于 2015-11-12T08:51:09.913 に答える