[解決済み】エラー: 'const ...' を '...' の 'this' 引数として渡すと、修飾子が破棄される
質問
<ブロッククオートerror: 'void A::hi()' の 'this' 引数として 'const A' を渡すと 修飾子 [-fpermissive] を使用します。
オブジェクトの参照を渡しただけで、何も返していないのに、なぜこのようなエラーが発生するのか理解できません。
#include <iostream>
class A
{
public:
void hi()
{
std::cout << "hi." << std::endl;
}
};
class B
{
public:
void receive(const A& a) {
a.hi();
}
};
class C
{
public:
void receive(const A& a) {
B b;
b.receive(a);
}
};
int main(int argc, char ** argv)
{
A a;
C c;
c.receive(a);
return 0;
}
編集
const correctnessを使って修正しましたが、今、同じメソッドの中のメソッドを呼び出そうとすると、同じエラーが発生します。しかし、奇妙なことに、このメソッドに参照を渡していないのです。
error: passing 'const A' as 'this' argument of 'void A::hi()' discards qualifiers [-fpermissive]
error: 'void A::hello()' の 'this' 引数として 'const A' を渡す。 は修飾語[-fpermissive]を破棄します。
error: 'void A::world()' の 'this' 引数として 'const A' を渡す。 は、修飾子 [-fpermissive] を破棄します。
解決方法は?
あなたの
#include <iostream>
class A
{
public:
void sayhi() const
{
hello();
world();
}
void hello()
{
std::cout << "world" << std::endl;
}
void world()
{
std::cout << "world" << std::endl;
}
};
class B
{
public:
void receive(const A& a) {
a.sayhi();
}
};
class C
{
public:
void receive(const A& a) {
B b;
b.receive(a);
}
};
int main(int argc, char ** argv)
{
A a;
C c;
c.receive(a);
return 0;
}
メソッドとして宣言されていません。
error: passing 'const A' as 'this' argument of 'void A::hello()' discards qualifiers [-fpermissive]
Aクラスの内部で したがって、コンパイラは
hi
への定数参照は変更されません。
const
そのため、エラーが発生します。
定数型メンバ関数についての詳細は、こちらをご覧ください。
ここで
の正しい使い方と
a.hi()
キーワード
こちら
.
関連
-
InstallShield でホスト名から IP アドレスを取得するコード
-
[解決済み] libc++abi.dylib: NSException 型のキャッチされない例外で終了する (lldb)
-
[解決済み】このリポジトリで別のgitプロセスが動作しているようです。
-
[解決済み】データフレームで関数を適用する場合、dim(X)は正の長さでなければならない
-
[解決済み】 c++ "Incomplete type not allowed" クラス参照情報へのアクセスエラー (前方宣言による円環状依存性)
-
[解決済み】エラー。式はintegralまたはunscoped enum型でなければなりません。
-
[解決済み] MIPSのフェッチアドレスがワード境界にアライメントされていないため、.align 4を使用したが、まだうまくいかない
-
[解決済み】ggplot2使用時の永続的な無効なグラフィックス状態エラー
-
[解決済み】C#コンパイラーエラー。"すべてのコードパスが値を返すわけではない"
-
[解決済み] error: 'this' 引数に xxx を渡すと修飾子が消える
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
batスクリプトからログを出力する方法
-
パスワード入力を非表示にする InstallShield スクリプト
-
[解決済み】「Error: デフォルトのデータセット例mtcarsとggplot2における「離散的なスケールに連続的な値が供給された」。
-
[解決済み】GAEで完全に有効なXMLをパースすると「Prologではコンテンツが許可されません」と表示される
-
[解決済み】'const char*' から 'char*' への無効な変換。
-
[解決済み】rmarkdownエラー "長さ0の変数名を使おうとした"
-
[解決済み】変数が初期化されていないかもしれないエラー
-
[解決済み】エラー。式はintegralまたはunscoped enum型でなければなりません。
-
[解決済み】math.hを含むにもかかわらず、C言語でpow( )への未定義参照【重複あり
-
[解決済み] error: 'this' 引数に xxx を渡すと修飾子が消える