2017-01-22 3 views
0

Derzeit ich in meinem Code habeWie kann ich passiere ein initialisierten Objekt

vector_2 v1(1.0,2.0); 
Frame.Draw(v1(2.0f,1.0f)); 

wo vector_2 eine Struktur mit einem Konstruktor, die 2 Doppelzimmer (Koordinaten) führt. Frame ist eine Instanz einer Klasse mit einer Funktion, die ein vector_2 als Parameter verwendet. Dies kompiliert einfach gut und so, wie ich es möchte.

aber wenn ich versuche, direkt, ohne einen Vektor Initialisierung vor dem Funktionsaufruf, z.B .:

Frame.Draw(vector_2 v1(2.0f,1.0f)); 

Der Compiler schlägt fehl mit der Fehlermeldung: erwartete Primärausdruck vor v1. Ich hatte gehofft, direkt innerhalb des Funktionsaufrufs zu initialisieren.

Ich frage mich, ob dies in C++ möglich ist, kann ich nicht die richtige Syntax kennen.

+5

'Frame.Draw ({2.0f, 1.0f }); ' – AndyG

+0

Das funktioniert. Vielen Dank. Warum die geschweiften Klammern? Damit ich meinen Fehler verstehen kann. Wäre dies auch möglich, wenn ein Objekt direkt in einem Konstruktor initialisiert wird, z. someClass :: someClass(): SomeOtherObject ({1.0.2.0f}) {...} – Majte

+0

Es initialisiert direkt Ihre Struktur. Stellen Sie es sich als eine Möglichkeit vor, Argumente zu übergeben, die zum Konstruieren des vom Funktionsaufruf benötigten 'vector_2' verwendet werden können. – AndyG

Antwort

0

Sie eine Variable innerhalb aa Aufruf erklärt:

Frame.Draw(vector_2 v1(2.0f,1.0f)); 

Sie haben, dies zu tun, die anstelle einer Variable eine temporäre direkt in Frame.Draw erklärt erklärt:

Frame.Draw(vector_2{2.0f, 1.0f}); 

oder

je nachdem, wie Sie Dinge deklariert haben. Seien Sie vorsichtig mit der Initialisierung in C++, ist es ziemlich verwirrend, für einige gotchas und die allgemeinen Arbeits mal hier vorbeischauen:

Verwandte Themen