在物件導向程式設計中,成員變數通常用作方法參數的預設值。但是,當嘗試將成員變數設為預設參數時,您可能會遇到「無效使用非靜態資料成員」之類的錯誤。
問題描述
您的目標是使成員函數的參數可選,在未提供參數時使用成員變數作為預設值。但是,您的程式碼會產生錯誤訊息「無效使用非靜態資料成員」。您懷疑程式碼有問題,但不確定解決方案。
程式碼片段
以下是提供的程式碼來說明問題:
class Object { public: void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; }; void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
解
解決方案void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation }
解決方案
解決方案成員函數的預設參數表達式只能依賴類別或全域範圍內的元素。此外,必須在方法的宣告(頭檔)中定義預設參數。 要解決此問題,請使用 MoveTo 方法的兩種重載:一種具有單一參數,另一種具有兩個參數。具有單一參數的方法呼叫具有兩個參數的方法,並傳遞預期的預設值。 透過呼叫 MoveTo(double) 並隨後呼叫 MoveTo(double, Point),此技術允許您遵循 DRY 原則(不要重複),僅實作 MoveTo 一次。以上是為什麼不能在 C 成員函數中使用成員變數作為預設參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!