与 child 构造函数同名的继承 class 成员

Inherited class member with the same name as child constructor

考虑这个例子:

    class Label{
    public:
        std::string Text;    
    };

    class Text:
        public Label
    {
    public:
        Text(std::string text) {}
    };

    int main()
    {
        Text text("");
        text.Text; //<---- GCC CE: Invalid use of 'class Text'
        return 0;
    }
    class Text:
        public Label
    {
    public:
        Text(std::string text) {}
        using Label::Text; // doesn't help either
    };

如果 class 成员与 child class 同名,怎么能继承该成员?

    class Text:
        public Label
    {
    public:
        Text(std::string text):
            Text::Text(Label::Text){}
        std::string &Text;
    };

这样的东西行得通吗? (我知道上面的代码没有。)

这里有一个解决方法(这很令人困惑);您可以通过基 class 名称访问基 class 的数据成员。例如

text.Label::Text;

尽管正确答案是(@songyuanyao 发表)

text.Label::Text;

我已经想出如何避免这种奇怪的语法了。

简单 "hack" 使用旧的 C 风格 typedef 就可以了:

    typedef class Text_:
        public Label
    {
    public:
        Text_(std::string text){}
    }Text;

现在突然编译了代码示例。 哇哦...C++ 魔法...