需要C++静态方法

kir*_*off 0 c++ static static-methods const

我有一个方法run()成员MyClass.编译时,我明白了

    Error   3   error C2662: 'MyClass::run' : 
    cannot convert 'this' pointer from 'const MyClass' to 'MyClass&'
Run Code Online (Sandbox Code Playgroud)

ITOH,如果我把这个方法设为静态,我没有错误.方法调用发生在这里:

Errors MyClass::execute( const AbstractExecutionContext &ctx ) const
{
    Errors errs;

    Watch wat; wat.restart();
    {

        run() ;

    }

    return errs;
}
Run Code Online (Sandbox Code Playgroud)

和这种方法的声明是

Errors execute(const AbstractExecutionContext &ctx) const;
Run Code Online (Sandbox Code Playgroud)

我希望我可以使这个方法不是静态的,因为如果它是静态的,run()调用的方法也必须是静态的,并且无法访问非静态的数据成员(我必须丑陋地将它们作为参数传递给方法) .

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

For*_*veR 8

run一定const也是.或功能execute不应该const.

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

  • 静态方法没有this指针,没有对象状态保持不变. (7认同)