2015-10-19 4 views
0

Хорошо, вот мой C заголовочный файл ++:Как использовать неинициализированный статический массив в C++?

// a.h 

class A 
{ 
private: 
    static A* aContainer[10]; 

public: 
    static void generate(int amount); 

} 

А вот .cpp файл:

// a.cpp 

void A::generate(int amount) 
{ 
    for(int i = 0; i < amount; i++) 
    { 
     aContainer[i] = new Container(); 
    } 
} 

Я знаю static поля должны быть инициализированы, но мне нужно способность иметь некоторое определенное количество элементов в aContainer , Если я инициализирую aContainer, он будет содержать все 10 элементов, а 10 - максимальное количество элементов.

Можно ли инициализировать aContainer с помощью NULL или что-то в этом роде?

+5

использования 'станд :: VECTOR' или' станд :: deque' для переменного размера контейнера –

+0

В качестве статического члена класса, массив автоматически инициализируется с нулевыми указателями. Я также рекомендую использовать реальный контейнер, а также рассмотреть 'std :: unique_ptr', чтобы объекты были уничтожены в конце дня. –

+0

Статические vars в классе/структуре не создают никакой памяти. Вам нужно объявить их в глобальном масштабе, а также получить память для них. –

ответ

0

Я предполагаю, что у вас есть веская причина не использовать std::vector, что является естественным способом решения этой проблемы.

массив или структура может быть инициализирован с фигурными скобками:

A* A::aContainer[10] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; 

Если какие-либо элементы в списке нет, они инициализируются нулем. Таким образом, выше может быть упрощено:

A* A::aContainer[10] = {}; 
+2

Это может быть упрощено далее до 'A * A :: aContainer [];' –

+1

Что такое 'NULL'? – Tas

+0

Большое спасибо, это именно то, что мне нужно. – sn4il

Смежные вопросы