1

我的问题是,在我的“Widget”类中,我有以下声明:

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. 在单独的非常量方法中分配给 Bar,
  2. 将 AssignAndDoStuff 更改为非常量,或
  3. 将 Bar 标记为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 回答