Ich verwende Visual Studio 2012, Angenommen, Test ist eine Klasse
%Vor%Wenn ich eine neue Instanz von Test erstelle, was ist der Unterschied zwischen den beiden folgenden Möglichkeiten?
Weg 1
%Vor%Weg 2
%Vor%Ich habe diese Frage in dem Code unten, ursprünglich habe ich eine Instanz von A in Weg 2 definiert, ich habe nur einen Fehler, weil B keinen Standardkonstruktor bietet, aber wenn ich es in Weg 1 definiere, bekam ich ein zusätzlicher Fehler.
%Vor%wenn ich ein In-Way 1 definiere
%Vor%Ich werde einen weiteren Fehler bekommen, sagte
Fehler C2248: 'A :: A': kann nicht auf private Member zugreifen, die in der Klasse deklariert sind 'A'
Ich denke also, dass zwischen den beiden Möglichkeiten einige Unterschiede bestehen müssen.
Test t;
definiert eine Variable namens t
vom Typ Test
.
Test t();
deklariert eine Funktion namens t
, die keine Parameter akzeptiert und ein Test
zurückgibt.
%Vor%Was ist der Unterschied zwischen zwei Deklarationen?
Deklariert eine Funktion und kein Objekt. Es ist eines der meisten Ärger parsen in C ++
Er deklariert eine Funktion mit dem Namen a
, die keine Parameter akzeptiert und den Typ A
zurückgibt.
Erstellt ein Objekt mit dem Namen a
vom Typ A
, indem es seinen Standardkonstruktor aufruft.
Warum erhalten Sie den Kompilierungsfehler?
Für eine Klasse ist der Standard-Zugriffsbezeichner private
. Sie erhalten den Fehler, weil Ihr Klassenkonstruktor private
lautet und nicht beim Erstellen des Objekts mit der obigen Syntax aufgerufen werden kann.
Tags und Links c++ most-vexing-parse