Im folgenden meinen Compiler sagt, dass mein abgeleiteten Klasse Konstruktor nicht gefunden werden kann:Warum wird mein abgeleiteter Klassenkonstruktor gelöscht?
struct Drink
{
Drink(const Drink& other);
};
struct PepsiMax : Drink {};
int main()
{
PepsiMax myPepsi; // <--- the default constructor of PepsiMax cannot be referenced, it is a deleted function
}
I der Standardkonstruktor von Getränke kennt, definiert werden muss, weil ich einen Kopierkonstruktor und der Compiler erstellt wird keine machen Standardkonstruktor für mich. Die Fehlermeldung besagt jedoch, dass es den Standardkonstruktor für meine PepsiMax-Klasse nicht finden kann, von der ich erwartete, dass sie es generiert. Wenn ich den Standardkonstruktor für PepsiMax definiere, dann zeigt es einen Fehler an, der besagt, dass es den Drink-Standardkonstruktor nicht finden kann, was ich erwarte.
Kann ich davon ausgehen, dass es sich auf den Standardkonstruktor von 'Drink' und nicht 'PepsiMax' bezieht, oder habe ich etwas falsch verstanden? Ich erwartete, dass der Compiler einen Standardkonstruktor für 'PepsiMax' erstellt, der den Basisklassenkonstruktor sofort als erstes aufruft.
Bearbeiten: Meine Verwirrung ist geklärt, danke für Ihre Hilfe. Meine Erklärung über meine naive Interpretation des compilergenerierten Konstruktors ist in einer Antwort enthalten.
Es ist, weil Drink keinen Standardkonstruktor hat, nur den Kopierkonstruktor Drink :: Drink (const Drink &), den Sie gerade angegeben haben. Wenn Sie einen Standardkonstruktor haben möchten, fügen Sie Drink() in der Struktur Drink oder PepsiMax() in der Struktur PepsiMax hinzu. – Hugal31