error: passing 'const A' as 'this' argument of 'void A::hi()' discards qualifiers [-fpermissive]errore: passare 'const ...' come 'this' argomento di '...' scarta qualificatori
Non capisco perché sto ricevendo questo errore, non sto restituendo nulla solo passando il riferimento dell'oggetto e questo è tutto.
#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
ho riparato utilizzando const correttezza, ma ora sto cercando di chiamare i metodi all'interno dello stesso metodo ed ottengo lo stesso errore, ma la cosa strana è che ho' m non passando il riferimento a questo metodo.
#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]
error: passing 'const A' as 'this' argument of 'void A::world()' discards qualifiers [-fpermissive]
'hi' è una funzione membro non-'const'; 'a' è' const'. –
passing significa come argomento (implicito). Non ha niente a che fare con il ritorno. – Deduplicator
Possibile duplicato di [errore: passare xxx come 'questo' argomento di xxx scarta qualificatori] (http://stackoverflow.com/questions/5973427/error-passing-xxx-as-this-argument-of-xxx-discards- qualificazioni) –