需要C ++静态方法

时间:2013-04-09 12:26:52

标签: c++ static const static-methods

我有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()调用的方法也必须是静态的,并且不能访问非静态的数据成员(我必须丑陋地将它们作为参数传递方法)。

编译错误的原因是什么,以及解决方案是什么?

1 个答案:

答案 0 :(得分:8)

run也必须是const。或者功能execute不应该是const

在执行函数中thisconst MyClass* const this。如果run不是static而不是const,则会尝试调用non-const对象的const函数。如果run是静态的 - 一切正常,因为static函数没有this指针。