0

これはおそらく非常に簡単です。std::set<int> my_set;一部のクラスのヘッダーファイルにを追加しました。次に、そのクラスの実装で、このセットに挿入しようとします。例として、これを実行するだけmy_set.insert(1); ではコンパイルは行われず、これは非常に奇妙な動作です。これが私のコンパイラエラーです:

error C2663: 'std::_Tree<_Traits>::insert' : 4 overloads have no legal conversion for 'this' pointer

セットを使用するために含めたファイルはです#include <set>。私は何を間違えましたか?コード内の他の場所でセットを呼び出していません。

4

1 に答える 1

3

についてエラーが発生しているがthis、を挿入しようとしているintので、ここで手足に出て、constメソッドでこれを実行しようとしていると思います。

class A
{
    std::set<int> my_set;
    void foo() 
    {
       my_set.insert(1); //OK
    }
    void foo() const
    {
       my_set.insert(1); //not OK, you're trying to modify a member
                         //std::set::insert is not const, so you can't call it
    }
};

を削除しconstます。メンバーを変更しているので、それは論理的なことのように思えます。

于 2012-05-17T20:06:14.060 に答える