Похоже, я пропустил что-то принципиальное здесь, но не получилось.Инициализировать закрытый массив с неизвестным количеством элементов (C++ 98)
Ниже приведен фрагмент и соответствующий ему выход.
Что я хотел сделать: - Объявить и инициализировать массив структур, не зная количества элементов заранее. - Идеально сам массив и его количество элементов: пользователей.
Что я пробовал:
- Заявленный
m_member_tab[]
иm_num_members
как частные. - Создана функция
Init()
, которая инициализирует объектm_member_tab[]
и вычисляетm_num_members
.
Результат:
m_member_tab[]
инициализируется нормально (смотри ниже выход).НО внутри конструктора (после звонка
Init
),m_member_tab
поврежден.#include <iostream> using std::cout; using std::endl; class TArrayTest { public: TArrayTest(); private: void Init(); typedef struct _TMember { int m_key; int m_val; } TMember; TMember m_member_tab[]; int m_num_members; }; TArrayTest::TArrayTest() { Init(); cout << "Ctor: Number of elements = " << m_num_members << endl; for(int i = 0; i < m_num_members; i++) { cout << "Ctor: " << "key " << m_member_tab[i].m_key << " - val " << m_member_tab[i].m_val << endl; } }; void TArrayTest::Init() { TMember m_member_tab[] = { { 1, 100 }, { 2, 200 }, { 3, 300 }, { 4, 400 }, { 5, 500 }, }; m_num_members = sizeof(m_member_tab)/sizeof(TMember); cout << "Init: Number of elements = " << m_num_members << endl; for(int i = 0; i < m_num_members; i++) { cout << "Init: " << "key " << m_member_tab[i].m_key << " - val " << m_member_tab[i].m_val << endl; } } int main() { TArrayTest test; }
Выход:
Init: Number of elements = 5
Init: key 1 - val 100
Init: key 2 - val 200
Init: key 3 - val 300
Init: key 4 - val 400
Init: key 5 - val 500
Ctor: Number of elements = 5
Ctor: key 5 - val 32766
Ctor: key 0 - val 0
Ctor: key 0 - val 0
Ctor: key -1212526907 - val 32623
Ctor: key 0 - val 0
Вы пробовали это. –
Это само по себе не помогает. Но в любом случае +1 для указания моей ошибки использования безрассудного использования temp var. – artm