无法指定一个指向templatized类的指针的成员

时间:2008-12-21 06:00:52

标签: c++ object templates const

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

MouseEvent* X;

在成员函数中,我用正常方式用地址初始化指针:

X = new MouseEvent;

好的,最后一行使编译器停在:

  

错误C2166:l-value指定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限定符。有什么提示吗?

感谢。

1 个答案:

答案 0 :(得分: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更改为非const或
  3. 将栏标记为mutable
  4. 选择以上其中一项:

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