fout: het doorgeven van ‘const ‘ als ‘dit’ argument van ‘ ‘ negeert kwalificaties

fout: doorgeven van ‘const A’ als ‘dit’ argument van ‘void A::hi()’ wordt weggegooid
kwalificaties [-fpermissive]

Ik begrijp niet waarom ik deze foutmelding krijg, ik geef niets terug, ik geef alleen de referentie van het object door en dat is het dan.

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

@edit

Ik heb het opgelost met behulp van const correctheid, maar nu probeer ik methoden binnen dezelfde methode aan te roepen en ik krijg dezelfde fout, maar het rare is dat ik de verwijzing naar deze methode niet doorgeef.

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

fout: ‘const A’ doorgeven als ‘this’ argument van ‘void A::hello()’
verwijdert kwalificaties [-fpermissive]

fout: ‘const A’ doorgeven als ‘this’ argument van ‘void A::world()’
verwijdert kwalificaties [-fpermissive]


Antwoord 1, autoriteit 100%

Uw methode hiis niet gedeclareerd als constin uw A-klasse. Daarom kan de compiler niet garanderen dat het aanroepen van a.hi()je constante verwijzing naar aniet zal veranderen, dus het geeft een foutmelding.

U kunt hiermeer lezen over functies van constante leden en het juiste gebruik van het constzoekwoord hier.


Antwoord 2

  1. Zoals reeds vermeld, is een optie om de methode hiconst-gekwalificeerd te maken.

  2. Een andere optie is om const_cast te gebruiken op het moment dat de methode hiwordt aangeroepen, zoals zo

A& ref = const_cast <A&>(a);
ref.hi();

LEAVE A REPLY

Please enter your comment!
Please enter your name here

8 + two =

Other episodes