エラーが発生した場合、「メンバ関数の 'this' 引数として const xxx を渡すと修飾子が破棄されます」 」は、非 const メンバー関数が const オブジェクトで呼び出されていることを示します。この場合、std::set 内に格納されている StudentT オブジェクトの getId() メソッドと getName() メソッドにアクセスするときに問題が発生します。
std::set 内のオブジェクトconst StudentT として保存されます。イテレータ逆参照 (*itr) で getId() および getName() を呼び出すと、コンパイラは不一致を検出します。メンバー関数は非 const ですが、アクセスされるオブジェクトは const です。
この問題を解決するには、メンバー関数 getId() と getName() を const メソッドとして宣言する必要があります。 :
int getId() const { return id; } string getName() const { return name; }
これらを const メソッドとして宣言することで、StudentT オブジェクトを変更しないことが保証され、安全に呼び出すことができます。
演算子<また、セット操作を実行するときに const StudentT オブジェクトに対して呼び出されるため、const メソッドとしても宣言する必要があります。
inline bool operator< (const StudentT & s1, const StudentT & s2) { return s1.getId() < s2.getId(); }
これを const として宣言することで、演算子が比較対象のオブジェクトを変更しないことが保証されます。
以上がC の「メンバ関数の 'this' 引数として const xxx を渡すと修飾子が破棄される」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。