我有run()
成员MyClass
。在编译时,我得到了
Error 3 error C2662: 'MyClass::run' :
cannot convert 'this' pointer from 'const MyClass' to 'MyClass&'
ITOH,如果我把这个方法设为静态,我没有错误。方法调用发生在这里:
Errors MyClass::execute( const AbstractExecutionContext &ctx ) const
{
Errors errs;
Watch wat; wat.restart();
{
run() ;
}
return errs;
}
此方法的声明是
Errors execute(const AbstractExecutionContext &ctx) const;
我希望我可以使这个方法不是静态的,因为如果它是静态的,run()调用的方法也必须是静态的,并且不能访问非静态的数据成员(我必须丑陋地将它们作为参数传递方法)。
编译错误的原因是什么,以及解决方案是什么?
答案 0 :(得分:8)
run
也必须是const
。或者功能execute
不应该是const
。
在执行函数中this
为const MyClass* const this
。如果run
不是static
而不是const
,则会尝试调用non-const
对象的const
函数。如果run
是静态的 - 一切正常,因为static
函数没有this
指针。