2016-09-18 2 views
1

Ich habe eine Codezeile in einer privaten Membervariablen der Klasse: „Parameter declarator erwartet“Vector Deklaration „erwarteten Parameter declarator“

vector<double> dQdt(3) 

Wenn in Xcode kompilieren, das gibt einen Fehler Ich denke, ich habe genügend Informationen zur Verfügung gestellt. Ich sehe mit dieser Erklärung nichts falsch.

Antwort

7

Sie haben die Variable in dem Konstruktor der Initialisiererliste zu initialisieren:

class X 
{ 
    private: 
    vector<double> dQdt; 
    public: 
    X() : dQdt(3) {} 
}; 
+0

Ja. Aber ist der Code nicht über eine Nicht-Initialisierung? Es wird nur eine bestimmte Größe für die Vektorvariable dQdt zugewiesen? Oder initialisiert es implizit die Variable? – nm17

+1

@ nm17 Compiler ist verwirrend mit Ihrer Deklaration als Funktionsdeklaration. – Raman

+0

^^^ AHHHHHHHHHH – nm17

2

Der Parameter für den Bau von Datenelementen sollte in der Initialisierungsliste der Klasse Konstruktor geschrieben werden. Das heißt, statt

class Foo { 
    vector<double> dQdt(3); 
}; 

Sie

class Foo { 
public: 
    Foo() : dQdt(3) {} 
private: 
    vector<double> dQdt; 
}; 
0

schreiben sollten, wenn Sie lesen z.B. this member initialization reference Sie erfahren, dass die Standard-Member-Initialisierung eine geschweifte Klammer oder gleich Initialisierer sein muss. I.e. geschweiften Klammern verwenden müssen Sie entweder:

vector<double> dQdt{3}; 

oder das Gleichheits Zeichen mit:

vector<double> dQdt = std::vector(3); 

Da dies wurde mit dem C++ 11-Standard eingeführt, müssen Sie das in Ihrer Umgebung ermöglichen.

+0

Technisch ist das nicht der "= Operator". Ich bin mir nicht sicher, was es ist, aber es ist kein Operator in einem Ausdruck. –

+0

@MartinBonner Ich weiß, aber ich könnte es nicht wirklich besser ausdrücken. Umformuliert es trotzdem. –

1

Wie in der Initialisierungsliste des Konstruktors wie Initialisierung, können Sie mit einem Doppelpack Initialisiererliste initialisieren:

class Foo { 
    vector<double> dQdt{3}; 
}; 

Der eigentliche Text des Fehlers, da der Compiler eine Funktion zu erklären, erwartet, ein Argument irgendeiner Art nehmen und die vector<double> zurückgeben. 3 ist keine gültige Deklaration eines Parameters zu einer Funktion.

Verwandte Themen