2013-04-09 200 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