Klassen(Reihenfolge)
-
#include <iostream> #include <vector> using namespace std; //Klasse , die nicht funktioniert class MeinVektor { vector<int> vec ; // falsche const unsigned int N; // Reihenfolge ! ! ! public : MeinVektor ( ) : N(5) , vec (N) { cout << vec.size () << endl; } } ; int main () { MeinVektor meinVektor ; return 0 ; }
Was genau ist die falsche Reihenfolge? Müssen etwa vektor<int> vecM und const unsigned int N; vertauscht werden?
-
Müssen etwa vektor<int> vecM und const unsigned int N; vertauscht werden?
Ja. Die Reihenfolge der Initialisierungsliste entspricht der Reihenfolge der Member.
-
out schrieb:
Müssen etwa vektor<int> vecM und const unsigned int N; vertauscht werden?
Ja. Die Reihenfolge der Initialisierungsliste entspricht der Reihenfolge der Member.
Und wieso genau müssen vector<int> vecM und const undigned int N vertauscht werden?
-
Weil sonst in der Initialisierungsliste der Konstruktor von
std::vector<int>
fürvec
mit einem uninitialisiertemN
aufgerufen wird.
-
Swordfish schrieb:
Weil sonst in der Initialisierungsliste der Konstruktor von
std::vector<int>
fürvec
mit einem uninitialisiertemN
aufgerufen wird.Aber als erstes wird doch vec aufgerufen.., oder?
-
user637 schrieb:
Swordfish schrieb:
Weil sonst in der Initialisierungsliste der Konstruktor von
std::vector<int>
fürvec
mit einem uninitialisiertemN
aufgerufen wird.Aber als erstes wird doch vec aufgerufen.., oder?
Leider
-
out schrieb:
user637 schrieb:
Swordfish schrieb:
Weil sonst in der Initialisierungsliste der Konstruktor von
std::vector<int>
fürvec
mit einem uninitialisiertemN
aufgerufen wird.Aber als erstes wird doch vec aufgerufen.., oder?
Leider
Wieso muss dann die Reihenfolge vertauscht werden, wenn vec als erstes aufgerufen wird..
Kann ich leider nicht so nachvollziehen..
-
user637 schrieb:
Wieso muss dann die Reihenfolge vertauscht werden, wenn vec als erstes aufgerufen wird..
Kann ich leider nicht so nachvollziehen..Hat Swordfish schon gesagt: Weil es kein N gibt.
-
Wenn die Reihenfolge "falsch" ist, wird
- vec mit N, das noch einen undefinierten Inhalt hat, initialisiert,
- danach N mit 5 initialisiert.Die Reihenfolge der Initialisierung ist die Reihenfolge, in welcher die Variablen in deklariert werden. Es ist völlig unerheblich, ob du
MeinVektor() : N(5), vec (N) { ... } // oder MeinVektor() : vec (N), N(5) { ... }
schreibst.
Das hier ist maßgeblich:
// so wird erst vec, dann N initialisiert class MeinVektor { vector<int> vec; const unsigned int N; // ... }; // so wird erst N, dann vec initialisiert class MeinVektor { const unsigned int N; vector<int> vec; // ... };
Compiler warnen, damit man nicht ausversehen die Reihenfolge falsch macht.