我的问题是,在我的“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限定符。有什么提示吗?
感谢。
答案 0 :(得分:3)
可能,初始化X的成员函数被标记为const - 就像这样。
class Foo
{
int *Bar;
public:
void AssignAndDoStuff() const
{
Bar = new int; // Can't assign to a const object.
// other code
}
}
此处的解决方案是
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
}
}