我在macos下编译问鼎工程时,遇到了一个警告:
"virtual function in A" was hidden by "virtual function in B"
大概是这样的情况:
class A
{
public:
virtual void func(int x);
};
class B
{
public:
virtual void func(int p, int q);
};
在VC中没有告警,但是xcode使用的gcc4看上去不是很愉快。它抱怨A中的func被B中的func隐藏了。
我搜索了一下,找到两个解决方案。
第一个方案:更名,让两个函数不要重名。如果不介意更名,那么这个方案可以接受。
第二个方案:使用using
class A
{
public:
virtual void func(int x);
};
class B
{
public:
using A:func;
virtual void func(int p, int q);
};
神奇的using一下,就没有这个警告了。
注:这个警告的原因可能是compiler认为B中的func同时承担了symbol overwrite & function override的责任,导致混乱。
没有评论:
发表评论