这是我在 stackoverflow 上的第一篇文章,所以要温柔:)
我有标准的钻石问题,但我设法解决了。
class Control
{
public:
bool Focused;
};
class Caption : public virtual Control
{
public:
string Text;
};
class Frame : public virtual Control { };
class Textbox : public Caption, public Frame, public TextEditor { };
可悲的是,出现了另一个继承问题。类TextEditor
具有通用变量名:
class TextEditor
{
public:
bool Focused;
string Text;
};
编译器给了我错误:
“文本”的模糊访问
'Focused'的模棱两可的访问
但我想要的只是将所有类中的那些变量合并到派生类“文本框”中。
感谢您提供任何形式的帮助,对于我提出的任何语言错误和/或问题,我们深表歉意。
更新
一点解释,因为我可能用错了词。对此感到抱歉。
通过“合并”,我的意思是:
- 如果我使用 的变量或方法
Control
,Caption
否则Frame
会影响 的值,TextEditor
反之亦然。换句话说,变量在派生类中共享。
所以我的最后一堂课看起来像这样:
class Textbox : public Caption, public Frame, public TextEditor
{
public:
string Text;
bool Focused;
};
而不是这样:
class Textbox : public Caption, public Frame, public TextEditor
{
public:
string Caption::Text;
bool Caption::Focused;
string TextEditor::Text;
bool TextEditor::Focused;
};
现在正在发生的事情。因为我不能这样做:
Textbox A;
A.Text = "Text";
因为我有两个名为Text
. 所以我必须这样做:
Textbox A;
A.Caption::Text = "Text";
A.TextEditor::Text = "Text";
最好的问候拉维