Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему в конструкторе нельзя присвоить значения 
V
    Опции темы
yngwie19
Дата 11.8.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Код

class my
{
public:
         my();                                                                                                                                                                                                                        
         int array[20];
};

int main()
{
SetConsoleCP(1251); //подключение рус.языка 
SetConsoleOutputCP(1251);
    
my def;
    
return 0;
}

my::my()
{
    array[20]={0};
}


почему в конструкторе нельзя массиву присвоить нулевые значения таким образом?
PM MAIL   Вверх
LavYaAll
Дата 11.8.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



yngwie19, если меня не подводит память, то так можно делать только при инициализации массива во время его обьявления(но ведь в обьявлении класса это невозможно), но никак не при простом присвоении. Если хочешь разом все обнулить, то попробуй использовать для этого memset, если не хочешь проходиться по массиву в цикле.

Это сообщение отредактировал(а) LavYaAll - 11.8.2008, 10:22
PM   Вверх
ksili
Дата 11.8.2008, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



yngwie19, ты обращаешься за преелы массива. 
у него последний элемент - array[19]


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
LavYaAll
Дата 11.8.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



ksili, так это вообще не сработает, даже если с array[19].
Потому что ему хочется внутри тела конструктора обнулить весь массив. Для чего поставил {}. 
PM   Вверх
ksili
Дата 11.8.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



сообщение об ошибке какое?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
LavYaAll
Дата 11.8.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



ksili, только что пытался откомпилить.
Код

int _tmain(int argc, _TCHAR* argv[])
{
     int x[20];

     x[19] = {0};
}

Выдает:
Цитата

error C2059: syntax error : '{'    
error C2143: syntax error : missing ';' before '{'    
error C2143: syntax error : missing ';' before '}'

Версия студии: MSVS 2008 Team Suite
Не будет это компилиться. Это только при инициализации запашет.

Это сообщение отредактировал(а) LavYaAll - 11.8.2008, 10:52
PM   Вверх
ksili
Дата 11.8.2008, 10:53 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Я вообще свои классы пишу очень редко и не очень во всем этом разбираюсь, но имхо какой смысл в конструкторе, если в нём нельзя задать значения членов класса? Это же одна из его основных функций. При желании в конструкторе можно даже инициализировать константные члены. Так что я думаю там что-то не так с синтаксисом

Добавлено через 1 минуту и 46 секунд
LavYaAll, это совсем другой пример - не то, что у автора топика.
Код

x[19] = {0};

это кажись вообще бред какой-то. если вы хотите задать значение элемента массива, то так и пишите:
Код

x[19] = 0;



--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
LavYaAll
Дата 11.8.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



Цитата(ksili @  11.8.2008,  12:53 Найти цитируемый пост)
это совсем другой пример - не то, что у автора топика.

Почему другой?  smile Посмотри листинг в первом сообщении.

Это сообщение отредактировал(а) LavYaAll - 11.8.2008, 11:01
PM   Вверх
cutwater
Дата 11.8.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Читайте мануалы. Автор хочет обнулить массив в конструкторе, но такое выражение применимо только при инициализации.
То есть запись вида
Код

int array[20] = {0};

Обнуляет массив (если полезть внутрь, то это вызов того же memset)
В фигурных скобках указываются последовательно начальные значения для элементов массива, если список инициализации меньше чем элементов массива, остальные инициализируются нулями.

ksili ты не прав

Это сообщение отредактировал(а) cutwater - 11.8.2008, 11:13


--------------------
user posted image
PM MAIL   Вверх
yngwie19
Дата 11.8.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



cutwater Спасибо. Я разобрался. Действительно массиву присваиваются начальные значения всех элементов только при его инициализации. А мы вроде как инициализировали в классе.

Добавлено через 2 минуты и 30 секунд
cutwater Спасибо. Я разобрался. Действительно массиву присваиваются начальные значения всех элементов только при его инициализации. А мы вроде как инициализировали в классе.


Это сообщение отредактировал(а) yngwie19 - 11.8.2008, 11:18
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.