c++ - 如何摆脱 C++Builder 警告 "virtual function hides..."

标签 c++ c++builder

考虑以下代码示例:

struct Base {
  virtual void foo(int) {}
  virtual void foo(int, double) {}

};

struct Derived : Base {
  virtual void foo(int) {}
};

在 Embarcadero RAD Studio 2010 (C++Builder 2010) 中,这给出了(正确的)警告,告诉我们 Base::foo(int,double)Derived 隐藏了::foo(int)。 (同样的警告由 gcc 的 -Woverloaded-virtual 触发)通常要做的是使用指令:

struct Derived : Base {
  virtual void foo(int) {}
  using Base::foo;
};

这按预期消除了 gcc 中的警告,但对 C++Builder 没有帮助,尽管它使基类函数对编译器可见:

Derived d;
d.foo(2,3.4);

使用 using 指令编译得很好。

除了使用 #pragma warn 或重新定义函数 à la 之外,是否有任何已知的解决方法来消除 C++Builder 中的警告

struct Derived : Base {
  virtual void foo(int) {}
  virtual void foo(int i, doubld d) {Base::foo(i,d); }
};

最佳答案

在派生类中声明所有形式的方法/函数会删除警告。

struct Derived : Base {
  virtual void foo(int, double) {}
  virtual void foo(int) {}
};

关于c++ - 如何摆脱 C++Builder 警告 "virtual function hides...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18311149/

相关文章:

c++ - 如何知道并加载特定文件夹中的所有图像?

delphi - 用于 C++ 模块的 Embarcadero RAD Studio XE 的 Comport Package Library

c++ - 尽管包含在 catch 语句中,但未捕获到异常

c++ - 截止时间计时器到期,现在怎么办?

c++ - 什么会导致我的程序在一段时间后无法使用所有内核?

c++ - 使用 QVariant::Type 在开关 block 中的用户类型的 GCC 警告

delphi - TStringGrid 输入验证仅允许 C++ Builder XE8 上的数字、小数和逗号

c++ - 如何在 Borland C++ Builder 6 中将字符串从 cp1250 转换为 utf-8

c++ - std::function 作为自定义流操纵器

c++ - 如何检查二进制文件中是否存在字符串?