Форум программистов, компьютерный форум CyberForum.ru

Инициализация двумерного массива в классе - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.73
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
02.01.2012, 20:46     Инициализация двумерного массива в классе #1
Есть класс:
C++
1
2
3
4
5
6
7
8
class Test
{
   int T[2][2];
 
public:
   Test();
   ~Test();
};
Вопрос, почему компилятор ругается на такую инициализацию массива?

C++
1
2
3
4
5
6
7
8
Test::Test()
{
 
   T[2][2] = { { 0,1 }, {0,2} };
 
}
 
Test::~Test() {}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5946 / 5551 / 1784
Регистрация: 18.12.2011
Сообщений: 14,181
Завершенные тесты: 1
02.01.2012, 20:57     Инициализация двумерного массива в классе #2
Явный инициализатор для массивов не разрешен.
Поэтому только циклами.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2012, 21:02     Инициализация двумерного массива в классе #3
Лжец, инициализируйте в конструктере циклами.
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
02.01.2012, 21:03  [ТС]     Инициализация двумерного массива в классе #4
Цитата Сообщение от zss2 Посмотреть сообщение
Явный инициализатор для массивов не разрешен.
Поэтому только циклами.
Спасибо. А можно это как-нибудь обойти? Просто именно явная инициализация в данный момент крайне удобна, а циклами слишком затратно, велика вероятность ошибки заполнения данных.

Я дошел вот до такого решения:

C++
1
2
3
4
5
6
7
8
Test::Test()
{
 
   int T2[2][2] = { { 0,1 }, {0,2} };
   
   memcpy(T1, T2, sizeof(T2));
 
}
Но оно мне совсем не нравится, может есть какой другой способ?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.01.2012, 21:04     Инициализация двумерного массива в классе #5
Цитата Сообщение от Лжец Посмотреть сообщение
Вопрос, почему компилятор ругается на такую инициализацию массива?
Потому что это не инициализация, а присваивание. Инициализация членов класса производится в списке инициализации конструктора. Компиляторы поддерживающие последнюю версию Стандарта(C++11) позволяют сделать так
C++
1
2
3
4
Test::Test()
    : T{{0,1}, {0,2}}
{
}
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
02.01.2012, 21:06  [ТС]     Инициализация двумерного массива в классе #6
Цитата Сообщение от rangerx Посмотреть сообщение
Компиляторы поддерживающие последнюю версию Стандарта(C++11) позволяют сделать так
Благодарю.
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
02.01.2012, 21:12     Инициализация двумерного массива в классе #7
Цитата Сообщение от Лжец Посмотреть сообщение
а циклами слишком затратно, велика вероятность ошибки заполнения данных.
ну а старый добрый способ
C
1
2
3
4
T1[0][0] = 0;
T1[0][1] = 1;
T1[1][0] = 0;
T1[1][1] = 2;
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
02.01.2012, 21:14  [ТС]     Инициализация двумерного массива в классе #8
Цитата Сообщение от ValeryS Посмотреть сообщение
ну а старый добрый способ
Вот его бы хотелось бы избежать, очень муторный, но все равно спасибо Раз явно нельзя, будем выдумывать что-нибудь. Всем спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2012, 21:27     Инициализация двумерного массива в классе
Еще ссылки по теме:

C++ Инициализация массива в классе
C++ Ошибка инициализации двумерного массива в классе
C++ Инициализация двумерного массива

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,047
02.01.2012, 21:27     Инициализация двумерного массива в классе #9
Цитата Сообщение от Лжец Посмотреть сообщение
Вот его бы хотелось бы избежать, очень муторный
для написания и сопровождения может быть да
а для процессора тоже самое

Цитата Сообщение от Лжец Посмотреть сообщение
T[2][2] = { { 0,1 }, {0,2} };
хотя если не два на два а хотя бы 16 на 16
то и в этом варианте можно накосячить
если у тебя как написано большинство нулей то
можно в цикле обнулить весь массив
а потом в определенные ячейки записывать нужное число
а если тебе нужен массив с разными значениями чтобы не перекомпилировать
каждый раз создай файл с нужными числами
в конструкторе считывай и инициализируй массив
если поменяешь один элемент в массиве не надо бедет перекомпилировать все
Yandex
Объявления
02.01.2012, 21:27     Инициализация двумерного массива в классе
Ответ Создать тему
Опции темы

Текущее время: 20:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru