2008年1月12日星期六

"virtual function in A" was hidden by "virtual function in B"

我在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的责任,导致混乱。

没有评论:

发表评论