1. ホーム
  2. その他

[解決済み】エラー: 'const ...' を '...' の 'this' 引数として渡すと、修飾子が破棄される

2022-01-17 05:38:22

質問

<ブロッククオート

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() キーワード こちら .