C++ Can';t指定一个成员,该成员是指向模板化类的指针

C++ Can';t指定一个成员,该成员是指向模板化类的指针,c++,object,templates,constants,C++,Object,Templates,Constants,我的问题是,在我的“Widget”类中,我有以下声明: MouseEvent* X; 在成员函数中,我以正常方式使用地址初始化指针: X = new MouseEvent; 好的,最后一行使编译器在以下位置停止: 错误C2166:l值指定常量对象 好的,MouseEvent被声明为typedef以简化事情: typedef Event__2<void, Widget&, const MouseEventArgs&> MouseEvent; typedef事件\u

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

MouseEvent* X;
在成员函数中,我以正常方式使用地址初始化指针:

X = new MouseEvent;
好的,最后一行使编译器在以下位置停止:

错误C2166:l值指定常量对象

好的,MouseEvent被声明为typedef以简化事情:

typedef Event__2<void, Widget&, const MouseEventArgs&> MouseEvent;
typedef事件\uuuu 2 MouseEvent;
事件2,正如你们所想象的:(所示的基本结构):

模板
班级活动2
{
...
};
我不知道Event__2类从哪里获得常量限定符。有什么建议吗


谢谢。

很可能,初始化X的成员函数被标记为const,类似这样

class Foo
{
   int *Bar;

public:

   void AssignAndDoStuff() const
   {
      Bar = new int; // Can't assign to a const object.
      // other code
   }
}
这里的解决办法是

  • 在单独的非常量方法中指定给条
  • 将AssignAndDoStuff更改为非常量,或
  • 将条形图标记为可更改
  • 选择上述选项之一:

    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
       }
    }
    
    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
       }
    }