2013-04-09 140 views
0

我有一个方法run()MyClass的成员。在汇编,我得到需要C++静态方法

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; 

我希望我可以使这个方法不是静态的,因为如果它是静态的,方法,通过运行被称为()必须是静态的以及非静态数据成员无法访问(我必须丑陋地将它们作为参数传递给方法)。

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

+0

是否可以添加完整的代码?或者至少是类定义? – Avi 2013-04-09 12:28:42

+0

这个链接可以帮助: http://stackoverflow.com/questions/5008541/how-to-call-a-non-const-function-within-a-const-function-c – 2013-04-09 12:30:55

+0

它看起来像你正在使用'this.something'而不是'this-> something'。但错误似乎是在'MyClass :: run()'而不是'MyClass :: execute()' – MaPePeR 2013-04-09 12:31:24

回答

8

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

在您的执行功能thisconst MyClass* const this。当run不是static而不是const - 有企图调用non-const函数的const对象。如果run是静态的 - 所有工作正常,因为static函数没有this指针。

+0

为什么它使用'static run()'然后呢?谢谢 – octoback 2013-04-09 12:28:59

+7

静态方法没有这个指针,没有对象状态保持不变。 – 2013-04-09 12:29:39

+0

可以说我的解决方案是让run()所调用的所有方法都是静态的,而且我使所有数据成员都需要静态。那么是否有可能在运行时更改此数据成员的值? – octoback 2013-04-09 12:33:31