2017-02-22 66 views
0

Так у меня есть класс со статическим вектором члена:статический член вектор переменной

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

Теперь я инициализировать MyVector до фактического его использования:

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

Тогда я хочу, чтобы определить переменную, как это в основной(), но это не похоже на работу:

Foo::MyVector::size_type t; 

Этот способ работает, но не выглядит красиво (на мой взгляд с):

vector<Bar>::size_type t; 

Какова основная концепция, которую я здесь отсутствовал?

EDIT

Главное в том, я должен всегда вернуться, чтобы увидеть декларацию MyVector в вектор < Bar> прежде чем приступить к объявляя size_type для него?

+4

Вы пробовали это на * ничего проще * раньше? 'std :: string s; s :: size_type n; // ??? ' –

+0

почему это не выглядит красиво для ваших глаз? –

+0

@OnurA. потому что мне нужно было перейти к классу для просмотра объявления MyVector – Sourena

ответ

7

Это не обходной путь. MyVector - объект. vector<Bar> - type. size_type является typedef в классе vector, а не переменной-членом.

+0

Итак, мне нужно вернуться к определению определения Foo: MyVector в классе, прежде чем приступать к определению переменной для хранения ее size_type? – Sourena

+0

@Sourena, нет, путем записи 'vector :: size_type' вы получаете доступ к типу размера этого конкретного вектора _type_. – SingerOfTheFall

+1

В C++ 11 вы можете использовать decltype (Foo :: MyVector) :: size_type –

0

size_type - тип, указанный в std::vector. Он связан с классом, а не с отдельными экземплярами. Кроме того, оператор :: используется только с пространствами имен и классами. Вы не можете использовать его с переменными.

+0

Спасибо за ответ. Я просто подумал, можно ли «Извлечь» typedef из экземпляра и не вернуться к его определению. – Sourena