处理 C++ 的 hides overloaded virtual function 警告

作者: , 共 870 字 , 共阅读 0

遇到这个问题,后来找到https://stackoverflow.com/questions/18515183/c-overloaded-virtual-function-warning-by-clang

下面这段代码

struct Base
{
    virtual void * get(char* e); 
};

struct Derived: public Base {
    virtual void * get(char* e, int index);
};

会爆出一个警告:

warning: 'Derived::get' hides overloaded virtual function [-Woverloaded-virtual]

这个警告是为了防止误写:

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

一个解决办法是:

struct Derived: public Base {
    using Base::get; // tell the compiler we want both the get from Base and ours
    virtual void * get(char* e, int index);
};

根据需要,可以把 Base 的函数直接隐藏掉:

struct Derived: public Base
{
    virtual void * get(char* e, int index);
private:
    using Base::get;
};

Q. E. D.

类似文章:
编程 » C++, 编译错误
在 gcc 中,存在继承关系的模版类,子类无法直接访问父类的成员,即使该成员是protectedpublic
出现的一个场景是将函数指针用 void
Pyhon 的抽象基类( abstruct base class )库abc定义了类似于 C++的纯虚函数的功能:
编程 » C++, C++标准库
std::tuple的原理并不复杂,但有些细节非常有意思。其中有一个是至少在gnu C++ std的实现中,std::tuple是倒序存储的:
编程 » C++, 异步
C++11 的标准异步库至少包含下面内容:
智能指针在现代 C++里用得越多。以前只知道它大致的原理,比如使用引用计数。但很多实现细节并不清楚,最直接的,它是如何实现多线程安全的?今天找了 gnu c++ library 的实现好好看了一下。
编程 » C++, Boost, 智能指针
如果理解了侵入式容器,侵入式智能指针也很容易理解。传统的智能指针std::shared_ptr使用了和数据无关的引用计数,这带来两个问题:
编程 » C++
假设在 C++里有一个数据结构:
编程 » C++, Boost, 数据容器
Boost.Intrusive 是一个很有意思的实现,里面实现了很多侵入式容器,在特定环境下,可以大大提升性能。
编程 » C++, 编译
一个典型的 GCC C++编译过程为:
夏天玩水是小朋友们最大的乐趣,怎么也要搞一次。
这个路线和之前的10 公里大环线类似,水库沿山脊的路线因为植被过于茂密,以及有很多蜘蛛网,改成从水库直接上快活林。因此路程稍微短了一些。但这段路也很有意思,一直是一条小溪,特别有趣味和挑战。