来自命名空间的Baseclass的虚拟继承,其私有成员来自命名空间

时间:2017-05-05 10:08:26

标签: c++ inheritance namespaces

为什么以下代码示例失败?

namespace Base {
    class Base {
        protected:
            int x;
    };

    class BaseAlt {
    };
}

namespace Derived {
    class Derived : public virtual Base::Base {
        private:
            Base::BaseAlt baseAlt;
    };
}

int main() {
    return 0;
}

g ++编译因以下错误而失败

error: ‘BaseAlt’ in ‘class Base::Base’ does not name a type
             Base::BaseAlt baseAlt;

为什么呢?

1 个答案:

答案 0 :(得分:0)

编译器正在解析父类“Base :: Base”,它没有名为BaseAlt的内部类。 BaseAlt类的完全限定名称是“:: Base :: BaseAlt”。需要额外的“::”来区分命名空间和类。