非 Const メンバー関数を Const オブジェクトに渡す際のエラー
提供されたコードでは、std::set を使用して StudentT を格納しています。オブジェクト。この問題は、セット内のオブジェクトに対して getId() および getName() メンバー関数を呼び出そうとしたときに発生します。これらのメンバー関数は const としてマークされていないため、オブジェクトのデータを変更する可能性があります。ただし、std::set 内のオブジェクトは const StudentT として保存され、いかなる変更も防止されます。
コンパイラはこの不一致を検出し、次のエラー メッセージを生成します。
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers ../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
このエラーは次のことを示します。コンパイラが const オブジェクトを this 引数として非 const メンバー関数に渡そうとしていること。
解決策:
この問題を解決するには、getId() および getName() メンバー関数を次のように const になるように変更します。
int getId() const { return id; } string getName() const { return name; }
これらの関数を const としてマークすると、オブジェクトのデータが変更されず、const で安全に呼び出すことができます。
さらに、< を作成することもお勧めします。演算子比較関数 const をパラメータに const 参照を渡すことによって作成します。
inline bool operator< (const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
これらの変更により、予期しないエラーが防止され、コードが正しく動作することが保証されます。
以上が`std::set` 内の Const オブジェクトとともに非 Const メンバー関数を使用するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。