さて、なぜgccがこれをあいまいと呼ぶのか興味があります。これをチェックして:
class base_stream
{
public:
std::string m_buffer;
};
class idatastream : public base_stream
{
};
class odatastream : public base_stream
{
};
class datastream : public idatastream, public odatastream
{
public:
void dostuff( m_buffer = "some text";) // reference is ambiguous?
};
base_streamでm_bufferを1回だけ宣言し、継承クラスで再宣言しないのに、両方の継承クラスから継承すると、m_bufferがあいまいになるのはなぜですか?エラーはこれを言います:
||In member function 'void datastream::dostuff()':|
|22|error: reference to 'm_buffer' is ambiguous|
|6|error: candidates are: std::string base_stream::m_buffer|
|6|error: std::string base_stream::m_buffer|
||=== Build finished: 3 errors, 0 warnings ===|
有効な候補者が同じであるため、ここで混乱しています。dostuffの定義を次のように変更すると:
void dostuff() {base_stream::m_buffer = "test string";}
、それが示唆するように、私はこのエラーを受け取ります:
||In member function 'void datastream::dostuff()':|
|22|error: 'base_stream' is an ambiguous base of 'datastream'|
||=== Build finished: 1 errors, 0 warnings ===|
これが問題の核心にあると私が思うところです。同じクラスから継承する2つのクラスから継承することはできませんか?