gpt4 book ai didi

c++ - 如何避免 Visual Studio 下的名称隐藏警告?

转载 作者:行者123 更新时间:2023-11-28 06:01:33 27 4
gpt4 key购买 nike

我有一个基类:

#define OUT
#define NO_VTABLE __declspec(novtable)

class NO_VTABLE Foo
{
public:

virtual bool TestSomething() const = 0;

virtual bool TestSomething(OUT unsigned int& extendedInfo) const {
UNUSED(extendedInfo);
return TestSomething();
}
};

派生类:

class NO_VTABLE Bar : public Foo
{
public:

virtual bool TestSomething() const {
// Do the test, return the result...
}
};

在 GCC 下,程序可以使用 -Wall -Woverloaded-virtual 进行干净的编译。在 Visual Studio 下,我得到了一个脏编译。上面的 TestSomethingAvailable,如下所示。

1> ...\derived.h(78) : warning C4266: 'bool DeviceState::Available(unsigned int &) const' :
no override available for virtual member function from base 'DeviceState'; function is hidden
1> ...\base.h(794) : see declaration of 'DeviceState::Available'
1> ...\base.h(787) : see declaration of 'DeviceState'

删除 NO_VTABLE 没有任何区别。警告仍然存在。

所有 TestSomething 在基类和派生类中都是公共(public)的虚拟的,所以我不清楚调用者隐藏了什么。

我正在 Visual Studio 下进行测试,我在 Visual Studio 2005、2008 和 2010 上都遇到过它。我还有其他 VS 需要测试,但在这一点上,我知道它不是一次性的.

我不想关闭警告,因为 base.h 文件很大,类很多,将来可能会遇到其他问题。

Visual Studio 声称对调用者隐藏了什么? Visual Studio 下警告的来源是什么,如何清除它?

最佳答案

如果您查找错误 C4266,您会发现它说 A derived class did not override all overloads of a virtual function. 因此,对于此编译器,您需要覆盖所有重载使 unsigned int & 变体可见。

我没有在语言规范中查找这是否符合要求。

关于c++ - 如何避免 Visual Studio 下的名称隐藏警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33192682/

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