无法分配指向模板化类的指针的成员

发布于 2024-07-10 19:55:49 字数 614 浏览 6 评论 0原文

我的问题是,在我的“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 类从哪里获取常量限定符。 有小费吗 ?

谢谢。

My problem is that in my "Widget" class i've the following declaration:

MouseEvent* X;

In a member function I initialize the pointer with an address the normal way:

X = new MouseEvent;

Ok, this last line makes the compiler stop at:

error C2166: l-value specifies const object

All right, a MouseEvent is declared as a typedef to simplify things:

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

And Event__2 is, as you may imagine as: (basic structure shown):

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

I don't know where the Event__2 class gets the const qualifier. Any tips ?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぃ弥猫深巷。 2024-07-17 19:55:49

很可能,您初始化 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 标记为可变的。

选择以上其中一项:

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

Likely, the member function where you are initializing X is marked as const - something like this.

class Foo
{
   int *Bar;

public:

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

The solution here is either to

  1. Assign to Bar in a separate non-const method,
  2. change AssignAndDoStuff to be non-const, or
  3. mark Bar as mutable.

Pick one of the above:

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
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文