1

私の問題は、「ウィジェット」クラスに次の宣言があることです。

MouseEvent* X;

メンバー関数では、通常の方法でポインターをアドレスで初期化します。

X = new MouseEvent;

わかりました、この最後の行はコンパイラを次の場所で停止させます:

エラー C2166: 左辺値が const オブジェクトを指定しています

わかりました、MouseEvent は、単純化するために typedef として宣言されます。

typedef Event__2<void, Widget&, const MouseEventArgs&> MouseEvent;

Event__2 は、ご想像のとおり (基本構造を示しています):

template <typename return_type, typename arg1_T, typename arg2_T>
class Event__2
{
     ...
};

Event__2 クラスが const 修飾子を取得する場所がわかりません。任意のヒント ?

ありがとう。

4

1 に答える 1

3

おそらく、Xを初期化するメンバー関数はconstとしてマークされています-このようなものです。

class Foo
{
   int *Bar;

public:

   void AssignAndDoStuff() const
   {
      Bar = new int; // Can't assign to a const object.
      // other code
   }
}

ここでの解決策は、

  1. 別の非constメソッドでBarに割り当てます。
  2. AssignAndDoStuffをnon-constに変更するか、
  3. バーをとしてマークしmutableます。

上記のいずれかを選択してください。

class Foo
{
   mutable int *Bar; // 3

public:
   void Assign() // 1
   {
       Bar = new int; 
   }   
   void DoStuff() const
   {
       // Other code
   }

   void AssignAndDoStuff() // 2
   {
      Bar = new int; 
      // other code
   }
}
于 2008-12-21T06:08:19.780 に答える