当前位置: 首页 > 知识库问答 >
问题:

错误:将'const...'作为'...'的'this'参数传递会丢弃限定符

卢英叡
2023-03-14

错误:将“const A”作为“void A::hi()”的“this”参数传递会丢弃限定符[-fppermissive]

我不明白为什么会出现这个错误,我没有返回任何东西,只是传递了对象的引用,就是这样。

#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 correction修复了它,但是现在我试图在同一个方法中调用方法,我得到了同样的错误,但奇怪的是我没有传递这个方法的引用。

#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;
}

错误:将“const A”作为“void A::hello()”的“this”参数传递会丢弃限定符[-fppermissive]

错误:将'const A'传递为'ullA::world()'的'this'参数会丢弃限定符[-fpermissive]

共有2个答案

景胜涝
2023-03-14

>

另一个选项是在调用hi方法时使用const_cast,如下所示

A& ref = const_cast <A&>(a);
ref.hi();
鲜于光辉
2023-03-14

您的hi方法在您的A类中没有声明为const。因此,编译器不能保证调用a.hi()不会更改您对a常量引用,因此它会引发错误。

您可以在此处阅读有关常量成员函数的更多信息,以及const关键字的正确用法。

 类似资料: