ホームページ > バックエンド開発 > C++ > C で「getId()」と「getName()」が「'const' オブジェクトを 'this' 引数として渡す」エラーを引き起こすのはなぜですか?

C で「getId()」と「getName()」が「'const' オブジェクトを 'this' 引数として渡す」エラーを引き起こすのはなぜですか?

DDD
リリース: 2024-12-23 20:18:15
オリジナル
839 人が閲覧しました

Why Are `getId()` and `getName()` Causing

エラー: Const オブジェクトを「this」引数として渡す

指定された C コードで、getId にアクセスしようとしているときにエラーが発生しましたに格納されたオブジェクトの () および getName() メンバー関数std::set:

<br>エラー: 'const StudentT' を 'int StudentT::getId()' の 'this' 引数として渡すと修飾子が破棄されます<br>エラー: 'const を渡すStudentT' を 'std::string StudentT::getName()' の 'this' 引数として破棄しますqualifiers<br>

このエラーは、std::set 内のオブジェクトが const StudentT インスタンスとして格納されていることが原因で発生します。これらの const オブジェクトに対して getId() 関数と getName() 関数を呼び出すと、コンパイラは問題を検出します。

C では、非 const メンバー関数は const オブジェクトを変更できません。 getId() と getName() は非 const 関数であり、呼び出されたオブジェクトを変更する可能性があります。ただし、セット内のオブジェクトは const であるため、これらのメンバー関数を使用してオブジェクトを変更しようとするとエラーになります。

解決策は、getId() 関数と getName() 関数も const にすることです。

int getId() const {
    return id;
}

string getName() const {
    return name;
}
ログイン後にコピー

これらの関数を const にすることで、関数が呼び出されるオブジェクトを変更しないことを示し、コンパイラは const での使用を許可します。

さらに、演算子

inline bool operator< (const StudentT & s1, const StudentT & s2) {
    return s1.getId() < s2.getId();
}
ログイン後にコピー
を実装することをお勧めします。比較関数としての使用目的に一致する const 参照として:

以上がC で「getId()」と「getName()」が「'const' オブジェクトを 'this' 引数として渡す」エラーを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート