c++ warning: hides overloaded virtual function

需求 C++ 中警告: tcp_socket.h:15:10: warning: 'TcpSocket::readData' hides overloaded virtual function qabstractsocket.h:215:12: note: hidden overloaded virtual function 'QAbstractSocket::readData' declared here: different number of parameters (2 vs 0) 解决 这个问题的原因很简单,就是子类里面重载了父类的虚函数,被重载的虚函数在子类中将会被隐藏。 何为隐藏呢,应该是不能使用子类实例直接调用父类被隐藏的函数,调用时必须指定父类命名空间,往深了说也就是编译器如果在子类中发现了要使用的函数的名字,注意,是名字不包含函数签名,只要名字匹配上,就不会再去父类中去寻找这个名字的函数,即便子类中的函数参数不匹配,也不会再去父类中寻找。 原因 注意是防止书写错误,比如下面这个,如果在子类定义的时候,想的是重写 void foo(BookA *), 结果把 A 写成 B 了,那么这个警告就能提醒了。 class BookA; //改动处 class BookB; //改动处 class A { public: virtual void foo(BookA *) { //改动处 cout << "foo of A" << endl; } }; class B : public A{ public: void foo(BookB *) { //改动处 cout << "foo of B" << endl; } }; int main(void) { A *b = new B(); //改动处 b->foo(new BookB()); return 0; } 解决警告 如果确实是需要重载,又不希望有这个警告碍眼,可以使用 private 加上 using 来解决。 private 是为了防止子类的对象来使用父类的这个虚函数。...

2023-07-22 · 1 min · 141 words · RamLife