オブジェクト指向プログラミングでは、メンバー変数はメソッド引数のデフォルト値として機能することがよくあります。ただし、メンバー変数をデフォルトの引数として設定しようとすると、「非静的データ メンバーの無効な使用」などのエラーが発生する可能性があります。
問題の説明
引数が指定されていない場合はデフォルト値としてメンバー変数を使用し、メンバー関数の引数をオプションにすることを目的としています。ただし、コードでは「非静的データ メンバーの使用が無効です」というエラー メッセージが表示されます。コードに問題があると思われますが、解決策がわかりません。
コード スニペット
以下は、問題を説明するために提供されたコードです:
class Object { public: void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; }; void Object::MoveTo(double speed, Point position = initPos) { currPos = postion; }
解決策
メンバー関数のデフォルトの引数式は、クラスまたはグローバル スコープ内の要素にのみ依存できます。さらに、デフォルトの引数はメソッドの宣言 (ヘッダー ファイル) で定義する必要があります。
これに対処するには、MoveTo メソッドの 2 つのオーバーロードを使用します。1 つは 1 つの引数を持ち、もう 1 つは 2 つの引数を持ちます。 1 つの引数を持つメソッドは、2 つの引数を持つメソッドを呼び出し、意図したデフォルト値を渡します。
void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Implementation }
MoveTo(double) を呼び出し、続いて MoveTo(double, Point) を呼び出すことにより、このテクニックを使用すると、次のことが可能になります。 DRY 原則 (自分自身を繰り返さない) に従って、MoveTo を 1 回だけ実装してください。
以上がC メンバー関数のデフォルト引数としてメンバー変数を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。