複数の引数を取るメソッドを含むクラスを作成する場合、次のようにすると有益です。一部の引数はオプションです。デフォルトの引数機能を使用すると、クライアント コードで値が提供されない場合に使用できる引数のデフォルト値を設定できます。
あなたの場合、MoveTo メンバー関数のデフォルト引数としてメンバー変数 (initPos) を使用しようとしました。ただし、コンパイラは、非静的データ メンバーの無効な使用を示すエラーを発行しました。
メンバー変数は、メソッドの一部とみなされているため、デフォルトではメソッドのスコープ内でアクセスできません。メソッドのコンテキストではなく、オブジェクトの状態を表します。その結果、デフォルトでは、メンバー関数の引数はクラス内またはグローバル スコープの要素にのみ依存できます。
この問題を解決するには、メソッドのオーバーロードに頼る必要があります。 。メソッドのオーバーロードを使用すると、異なるシグネチャを持つ同じメソッドの複数のバージョンを作成できます。これをコードに実装する方法は次のとおりです。
// Object.h class Object { public: ... void MoveTo(double speed); void MoveTo(double speed, Point position); protected: Point initPos; Point currPos; };
// Object.c void Object::MoveTo(double speed) { MoveTo(speed, initPos); } void Object::MoveTo(double speed, Point position) { // Everything is done here. }
MoveTo メソッドの 2 つのバージョンを定義することで、メンバー変数に直接依存せずにデフォルトの引数を効果的に提供できます。 MoveTo(double) メソッドは、2 番目の引数として initPos 値を指定して MoveTo(double, Point) メソッドを呼び出します。これにより、必要な機能を保持し、コンパイラ エラーを回避できます。
以上がC メソッドのデフォルト引数としてメンバー変数を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。