2013-10-12 5 views
0

У меня проблема. Я хочу инициализировать мой 2Dim-массив, который является членом класса, в конструкторе класса. Например .C++ инициализация неизвестного размера 2DimArray в конструкторе

class Foo 
{ 
    private: 

     bool testArray[100][4]; 

    public: 

     Foo(bool t_array[][4]);   
}; 

в файле foo.cpp:

Foo::Foo(bool array[][4]) 
{ 
    // initilize it in there with unknown row size 
} 

Я не имею определенный размер строки, но я знаю, что это будет максимум 100.

Как я мог initilize мой testArray в моем конструктор? заранее спасибо.

+0

http://stackoverflow.com/questions/2409819/c-constructor-initializer-for-arrays?rq=1 –

+0

http://stackoverflow.com/questions/4680125/template-class-constructor-issues-designing -a-container-for-multidim-arrays? rq = 1 –

ответ

1

Поскольку ваш массив типа bool [100][4] распадается на указатель типа bool (*) [4], когда он передается конструктору, вы также должны передавать количество строк. Нет другого способа, каким образом этот конструктор обнаружит реальный размер этого массива.

Вместо этого вы можете вместо этого использовать std::vector< std::array<bool, 4> >.

+0

спасибо за ответ. Я не имею права изменять типы функций. Есть ли способ понять это без изменения деклараций? – Bambi

+0

@Bambi: Возможно, было бы возможно, если бы вы использовали некоторую последовательность значений для обозначения конца массива. Однако это не похоже на разумное решение. Почему вы не можете изменить декларацию? – LihO

+0

@Bambi Вас попросили сделать что-то невозможное, или вы неправильно поняли, что вы ожидаете делать. – john

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