与 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++ 魔法...
考虑这个例子:
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++ 魔法...