[解決済み] error: 'this' 引数に xxx を渡すと修飾子が消える
2022-03-21 13:18:23
質問
#include <iostream>
#include <set>
using namespace std;
class StudentT {
public:
int id;
string name;
public:
StudentT(int _id, string _name) : id(_id), name(_name) {
}
int getId() {
return id;
}
string getName() {
return name;
}
};
inline bool operator< (StudentT s1, StudentT s2) {
return s1.getId() < s2.getId();
}
int main() {
set<StudentT> st;
StudentT s1(0, "Tom");
StudentT s2(1, "Tim");
st.insert(s1);
st.insert(s2);
set<StudentT> :: iterator itr;
for (itr = st.begin(); itr != st.end(); itr++) {
cout << itr->getId() << " " << itr->getName() << endl;
}
return 0;
}
インラインで
cout << itr->getId() << " " << itr->getName() << endl;
というエラーが出ます。
../main.cpp:35: error: 'int StudentT::getId()' の 'this' 引数に 'const StudentT' を渡すと、修飾子が破棄されます。
../main.cpp:35: error: 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
このコードのどこが問題なのでしょうか?ありがとうございます。
解決方法は?
のオブジェクトは
std::set
として格納されます。
const StudentT
. そのため
getId()
を使用して
const
これは、const 型のメンバ関数はオブジェクトを変更しないという約束をしていないため、許可されていません。
安全
と仮定します。
getId()
はオブジェクトを変更しようとするかもしれませんが、同時にそのオブジェクトが const であることにも気づいています。したがって、const オブジェクトを変更しようとするとエラーになるはずです。そのため、コンパイラはエラーメッセージを生成します。
解決策は簡単で、関数をconstにすることである。
int getId() const {
return id;
}
string getName() const {
return name;
}
を呼び出すことができるようになったので、これは必要なことです。
getId()
と
getName()
として const オブジェクトに追加します。
void f(const StudentT & s)
{
cout << s.getId(); //now okay, but error with your versions
cout << s.getName(); //now okay, but error with your versions
}
余談ですが
operator<
として。
inline bool operator< (const StudentT & s1, const StudentT & s2)
{
return s1.getId() < s2.getId();
}
注パラメータは現在
const
を参照してください。
関連
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー: 'const ...' を '...' の 'this' 引数として渡すと、修飾子が破棄される
-
[解決済み】coutはstdのメンバではない
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された