hides overloaded virtual function 警告
在使用clang编译mysql-connector-cpp报告了一条警告hides overloaded virtual function
,(在开启所有警告以及额外警告的前提下)。
在StackOverflow上可以看到一条讨论的链接stackOverflow
这条警告复现的一个简单的示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <iostream>
class Base
{
public:
virtual int Add(int x)
{
return x+1;
}
};
class Drived:public Base
{
public:
virtual int Add(int x,int y)
{
return x+y;
}
};
int main(int argc,char* argv[])
{
std::cout << argc << "\t"<< argv[0] << std::endl;
return 0;
}
|
使用g++ 7.3.0编译,不会报警告失败。
g++ -Wall -Wextra -Werror Test3.cpp

使用clang++ 6.0.0报警告
clang++ -Wall -Wextra -Werror ./Test3.cpp

这个警告的意思主要是防止不小心用重载覆盖了重写。本意是想重写,结果重载了。
比如下面这样的情况:
1
2
3
4
5
6
7
8
9
|
struct chart; // let's pretend this exists
struct Base
{
virtual void* get(char* e);
};
struct Derived: public Base {
virtual void* get(chart* e); // typo, we wanted to override the same function
};
|
在Drived的类中加入 using Base::Add;可以去除这条警告。