2017-02-22 9 views
0

So habe ich eine Klasse mit einem statischen Vektor Mitglied:statische Vektor-Membervariable

class Foo { 
// some private members 
public: 
static vector<Bar> MyVector; 
}; 

Jetzt initialisieren ich myvector, bevor es tatsächlich mit:

std::vector<Bar> Foo::MyVector; 

Dann ich so eine Variable definieren möchten in main(), aber es scheint nicht zu funktionieren:

Foo::MyVector::size_type t; 

Diese Problemumgehung funktioniert, aber nicht schön aussehen (zu meinem Auge s):

vector<Bar>::size_type t; 

Was ist das Grundkonzept, das ich hier vermisst habe?

EDIT

Der wichtigste Punkt ist, sollte ich immer wieder zurück Erklärung myvector als Vektor < Bar sehen>, bevor Sie fortfahren ein size_type dafür zu erklären?

+4

Haben Sie das schon einmal * einfacher * probiert? 'std :: Zeichenkette s; s :: Größe_Typ n; // ??? ' –

+0

Warum sieht es für deine Augen nicht schön aus? –

+0

@OnurA. weil ich zu der Klasse für sehen Deklaration von MyVector – Sourena

Antwort

7

Es ist keine Problemumgehung. MyVector ist Objekt. vector<Bar> ist Typ. size_type ist typedef in vector Klasse, keine Mitgliedsvariable.

+0

Also muss ich zurückgehen, um die Definition von Foo: MyVector in der Klasse zu sehen, bevor Sie mit der Definition einer Variablen zum Speichern ihres size_type fortfahren? – Sourena

+0

@Sourena, nein, indem Sie 'vector :: size_type 'schreiben, greifen Sie auf den Größentyp dieses bestimmten Vektors _type_ zu. – SingerOfTheFall

+1

In C++ 11 können Sie declltype (Foo :: MyVector) :: size_type –

0

size_type ist ein in std::vector deklarierter Typ. Es ist an die Klasse gebunden, nicht an einzelne Instanzen. Darüber hinaus wird der Operator :: nur mit Namespaces und Klassen verwendet. Sie können es nicht mit Variablen verwenden.

+0

Danke für die Antwort. Ich habe gerade darüber nachgedacht, ob es möglich ist, einen Typedef aus einer Instanz zu "extrahieren" und nicht zurück zu gehen, um seine Definition zu sehen. – Sourena

Verwandte Themen