メンバー関数呼び出しの関数修飾に矛盾があります
提供されたコードでは、メンバー関数 getId() および getName() にアクセスするときにエラーが発生します。セット
これを理解するには、セット内のオブジェクトが const 参照として格納されることを覚えておく必要があります。ただし、メンバー関数 getId と getName は const として宣言されていません。これは、それらがオブジェクトの状態を変更できることを意味します。
エラーが発生する行:
cout << itr->getId() << " " << itr->getName() << endl;
コンパイラは、itr イテレータが const StudentT オブジェクトを指していることを検出しますが、このオブジェクトは定義上変更できません。したがって、const オブジェクトで非 const メンバー関数を呼び出すことは許可されないため、次のようなエラー メッセージが生成されます。
../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
この問題を解決するには、メンバー関数 getId と getName を const として宣言する必要があります。オブジェクトの状態を変更しないことを示します:
int getId() const { return id; } string getName() const { return name; }
これらの関数を const にすることで、const で安全に呼び出せることが保証されます。
さらに、演算子
を使用して、定数不一致エラーを排除します。 StudentT クラスのオーバーロードも const:inline bool operator<(const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }として宣言する必要があります。これにより、比較演算で比較対象のオブジェクトの変更が試行されなくなり、コードの正確性が維持されます。
以上が`std::set` からメンバー関数にアクセスすると、「passing 'const StudentT' as 'this' argument」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。