gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:40 24 4
gpt4 key购买 nike

考虑以下代码示例:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com