Ich habe gesucht und konnte das Problem nicht finden, das ich erfahre, aber vielleicht weiß ich einfach nicht, wie ich die Frage klar formulieren soll.Warum behandelt ein Elternteil einer Enkelklasse die Initialisierung der Großelternklasse nicht?
Erstens, ich habe nur einen C++ 98 Compiler auf der fraglichen Plattform, also wenn Sie bitte das im Hinterkopf behalten könnten, wenn ich antworte, würde ich es begrüßen.
Lassen Sie mich mein Beispiel geben und die Fehlermeldung erhalte ich:
namespace mal {
struct Exception : virtual std::runtime_error {
Exception(): std::runtime_error("mal exception") {}
explicit Exception(const char* msg): std::runtime_error(std::string(msg?msg:"")) {}
explicit Exception(const std::string& msg): std::runtime_error(msg) {}
virtual ~Exception() throw() {}
}; // Exception struct
struct OpenException : virtual Exception {
OpenException(): Exception("mal open error") {}
}; // OpenException struct
}; // mal namespace
ich die folgende Fehlermeldung erhalten:
malt.cpp: In constructor ‘mal::OpenException::OpenException()’:
malt.cpp:18: error: no matching function for call to ‘std::runtime_error::runtime_error()’
OpenException Exception erbt, die std :: runtime_error und initialisiert erbt es zu einer Schnur. Warum initialisiert die OpenException-Initialisierungsanweisung Exception("mal open error")
std :: runtime_error nicht mit der const char * -Überladung von Exception? Erweitert sich das nicht durch die Vererbungshierarchie?
Wenn C erbt B und B erbt A, scheint es entgegen OO Prinzipien, die C haben würde über die Details der Implementierung von A. wissen
Siehe auch http://stackoverflow.com/questions/38104855/inheritance-wrong-call-of-constructors. –
@RSahu Okay, danke. Meine Frage hatte wirklich nichts mit Mehrfachvererbung zu tun, also hoffe ich, dass Sie mein "Duplikat" hier draußen lassen, falls jemand das gleiche Problem hat wie ich. Mein Problem wurde durch virtuelle Vererbung verursacht *; Aber ohne das zu wissen, würde ich keine gute Suchfolge formulieren, um die Lösung zu finden, die Sie als Duplikat identifiziert haben. – Luv2code
Absolut. Ich mache nichts anderes zu deinem Posten. –