Okay, ich bin neugierig, warum Gcc dies eine Zweideutigkeit nennt. check this:mehrere Vererbungsfehler
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?
};
i erklären m_buffer nur einmal in base_stream, und es nicht in den Vererbungsklassen neu deklarieren, also warum ist es, dass, wenn ich von den beiden Vererbungsklassen erben, m_buffer ist nicht eindeutig? der Fehler sagt dies:
||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 ===|
ich verwirrt bin hier, weil die gültigen Kandidaten gleich sind. wenn ich die Defintion von dostuff zu ändern:
void dostuff() {base_stream::m_buffer = "test string";}
, wie es schon sagt, bekomme ich diesen Fehler:
||In member function 'void datastream::dostuff()':|
|22|error: 'base_stream' is an ambiguous base of 'datastream'|
||=== Build finished: 1 errors, 0 warnings ===|
Dies ist, wo ich das Herz des Problems denken liegt. Kann ich nicht von zwei Klassen erben, die von derselben Klasse erben?
Google "Diamant Problem C++". – cHao
ha. Diamant. Ich verstehe es. Wenn Sie also jede der Klassen, die von der Basis erben, als virtuell markieren, bevor Sie sie mehrfach vererben, vermeiden Sie Mehrdeutigkeiten und stellen sicher, dass sie nur einmal vererbt werden. einfach und danke: P. – FatalCatharsis
möglich Duplikat von [virtuelle Ableitung & Umwandlung mehrdeutig] (http://stackoverflow.com/questions/10093854/virtual-derivation-conversion-ambiguous) –