C ++ 11 Konstruktorvererbung und Konstruktoren ohne Parameter

8

In diesem Codeabschnitt wird der Konstruktor von A ohne Parameter nicht vererbt? Gibt es eine spezielle Regel, die Erben von Konstruktoren ohne Parameter verhindert?

%Vor%

clang ++ -std = c ++ 11 gibt diesen Fehler und g ++ -std = c ++ 11 gibt eine im Wesentlichen ähnliche Fehlermeldung:

%Vor%     
Sami Liedes 07.12.2013, 00:15
quelle

2 Antworten

7

Die relevanten Informationen sind in 12.9 [class.inhctor] Absatz 3 (die Hervorhebung wird hinzugefügt):

  

Für jeden Nicht-Template-Konstruktor in der Kandidatenmenge geerbter Konstruktoren , außer einem Konstruktor ohne Parameter oder einem Copy / Move-Konstruktor mit einem einzelnen Parameter , wird ein Konstruktor implizit mit demselben Konstruktor deklariert Eigenschaften, es sei denn, es gibt einen user-deklarierten Konstruktor mit derselben Signatur in der vollständigen Klasse, in dem die using-Deklaration angezeigt wird. [...]

Das heißt, der Standardkonstruktor wird nur dann geerbt, wenn er ein [default] -Argument hat. Wenn sie ein Standardargument haben, werden sie vererbt, aber ohne das defaulted-Argument, wie ein Knoten im selben Absatz zeigt:

  

Hinweis: Standardargumente werden nicht vererbt. [...]

Grundsätzlich heißt das, dass Standardkonstruktoren nicht vererbt werden.

    
Dietmar Kühl 07.12.2013, 00:48
quelle
0

Es gibt keinen Konstruktor in B ohne Parameter, probiere

aus %Vor%     
user3076373 07.12.2013 00:43
quelle

Tags und Links