Looks like I missed something fundamental here, but haven't worked it out.
Below is a snippet and its corresponding output.
What I wanted to do is: - Declare and initialize an array of structs, without knowing the number of elements in advance. - Ideally the array itself and its number of elements are private members.
What I tried:
- Declared
m_member_tab[]
andm_num_members
as private. - Created an
Init()
function that initializesm_member_tab[]
and calculatem_num_members
.
Outcome:
m_member_tab[]
is initialized ok (see below output).BUT inside the constructor (after calling
Init
),m_member_tab
is corrupted.#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; }
Output:
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