下面的代码给出了 clang-12 警告:
warning: 'foo::TIFFFormat::encodePixels' hides overloaded virtual function [-Woverloaded-virtual]
我该如何解决此警告所描述的问题?
namespace foo {
struct bar {
int k;
};
class IImageFormat
{
public:
virtual ~IImageFormat() = default;
virtual bool encodePixels(void) = 0;
virtual bool encodePixels(bar pixels) = 0;
};
class ImageFormat : public IImageFormat
{
public:
bool encodePixels(bar pixels) override;
};
bool ImageFormat::encodePixels(bar pixels){
(void)pixels;
return false;
}
class TIFFFormat : public ImageFormat
{
public:
bool encodePixels() override;
};
bool TIFFFormat::encodePixels(){
return false;
}
}
foo::TIFFFormat tf;
最佳答案
在派生类中声明两个重载之一,而不声明另一个重载,将导致从派生类进行名称查找时仅查找在派生类中声明的重载。
因此,使用您的代码,您将无法调用例如tf.encodePixels(foo::bar{})
。
如果您不想在派生类中重复所有重载,可以通过 TIFFFormat
中的 using
声明导入所有重载:
using ImageFormat::encodePixels;
如果您不关心或不希望从派生类无法访问重载,则该警告与您无关。
关于c++ - 解决 clang-12 过载虚拟警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71309239/