C は広く使用されているプログラミング言語ですが、コーディング プロセス中にさまざまな問題が頻繁に発生します。そのような問題の 1 つは、「const メンバー関数は非 const オブジェクトでは呼び出すことができません」というコンパイル エラーです。この問題が発生すると、コンパイラによってプロンプトが表示されます。これは、const 関数が呼び出されたときにオブジェクトが「非 const」として扱われることを意味し、予期しない動作が発生する可能性があります。この記事では、この問題とその解決方法について説明します。
C では、メンバー関数の後に const キーワードを追加して、それを const メンバー関数として定義できます。つまり、オブジェクトの状態が変更されていないこと。例:
class MyClass { public: void changeValue() { m_value = 1; } int getValue() const { return m_value; } private: int m_value; };
上記のコードでは、changeValue() 関数は const 関数ではありませんが、getValue() 関数は const 関数であり、オブジェクトの状態は変更しません。 const としてマークされています。
C では、非 const オブジェクトと const メンバー関数の間の呼び出しは実装できますが、非 const オブジェクトが const メンバーを呼び出す場合、関数 、コンパイラでコンパイル エラーが発生しました。その理由は、const メンバー関数はオブジェクトの状態が変更されないことを保証するため、const オブジェクトのみがそれらの関数を呼び出すことができるためです。したがって、非 const オブジェクトは const メンバー関数を呼び出すことができません。そうしないと問題が発生します。
この問題を解決するには、次の 2 つの一般的な方法があります。
3.1 非 const オブジェクトを const オブジェクトに変換する
非 const オブジェクトで const メンバー関数を呼び出すことは許可されていませんが、オブジェクトを const として宣言することはできます。このようにして、オブジェクトが const 状態にあるときに、const メンバー関数を呼び出すことができます。例:
MyClass obj; const MyClass& constObj = obj; int value = constObj.getValue();
上記のコードでは、非 const オブジェクト obj が const オブジェクト constObj に変換され、その後 getValue() 関数が呼び出されます。このようにしてコンパイラ エラーを回避できます。
3.2 const メンバー関数を非 const 関数に変更する
const メンバー関数でオブジェクトの状態を変更する必要がある場合は、非 const 関数に変更する必要があります。関数。メンバー関数のコードを変更する前に、コードの意味と変更による影響を必ず理解してください。オブジェクトが関数内でのみ変更される場合、または変更が不要な場合は、関数を非 const 関数として変更するよりも const 関数として保持することをお勧めします。
C では、非 const オブジェクトと const メンバー関数の間の呼び出しが非常に一般的です。コンパイラーが「非 const オブジェクトは const メンバー関数を呼び出すことができません」というエラーを表示する場合、2 つの一般的な解決策を使用できます。それは、非 const オブジェクトを const オブジェクトに変換するか、const メンバー関数を非 const 関数に変更することです。この問題を効果的に回避するには、コードを作成する際に、各関数の意味と役割を慎重に検討し、正しい関数タイプを選択してください。
以上がC++ コンパイル エラー: 非 const オブジェクトは const メンバー関数を呼び出すことができません。解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。