Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
#1

Где инициализировать переменные класса?

28.01.2014, 14:03. Просмотров 434. Ответов 8
Метки нет (Все метки)

Почему я не могу инициализировать переменную непосредственно в описании класса?

C++
1
2
3
4
5
6
7
8
class Primer
{
publuc:
Metod1() {...};
 
private:
WCHAR name[20] = L"name_name";    */ошибка data member initializer is not allowed (не разрешено инициализировать */
};
Где тогда инициализировать? В конструкторе инициализация не удается, пишет, что значение должно меняться левостороне.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 14:03
Ответы с готовыми решениями:

Не могу инициализировать переменные класса
Доброго времени суток, проблема такая: есть функция getscore (строки 92-106),...

Где инициализировать константные данные класса?
Вот ошибка: в пределах класса могут быть инициализированы только статестические...

Где инициализировать члены класса CTreeCtrl?
В диалоговом окне, например, оконные члены класса инициализируются в...

Как инициализировать переменные?
Здравствуйте. Где можно полно осведомиться о том как инициализируются...

Конструктор класса не дает инициализировать переменную класса
Привет. Вот такой вот класс. Когда пытаюсь в конструкторе присвоить name и...

8
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
28.01.2014, 14:29 #2
Цитата Сообщение от casper007 Посмотреть сообщение
Почему я не могу инициализировать переменную непосредственно в описании класса?
Потому, что это раздел описания.
Цитата Сообщение от casper007 Посмотреть сообщение
В конструкторе инициализация не удается
Ну почему же?
C++
1
2
3
4
5
6
7
8
9
10
11
class Primer
{
public:
  Primer():
    name(L"name_name")
    {}
  Metod1() {};
 
private:
  wchar_t *name;
};
1
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
28.01.2014, 14:36  [ТС] #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Primer(): name(L"name_name") {}
Я раньше не видел такой конструкции. Двоеточие - это какой-то оператор?
0
Tulosba
:)
Эксперт С++
4748 / 3242 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.01.2014, 14:36 #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ну почему же?
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
1
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
28.01.2014, 14:43  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
то есть, нужно использовать wstring? почему не стоит использовать wchar_t*?
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
28.01.2014, 14:45 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
Да. Все именно так. Думал так будет нагляднее.
Цитата Сообщение от casper007 Посмотреть сообщение
Я раньше не видел такой конструкции.
Это инициализация членов класса списком параметров.
1
Tulosba
:)
Эксперт С++
4748 / 3242 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.01.2014, 14:45 #7
Цитата Сообщение от casper007 Посмотреть сообщение
нужно использовать wstring? почему не стоит использовать wchar_t*?
Если хочется самому управлять памятью, то, пожалуйста, используйте wchar_t* явно. Если не хочется - std::wstring лучшее решение.
1
casper007
69 / 69 / 58
Регистрация: 12.12.2013
Сообщений: 420
28.01.2014, 16:31  [ТС] #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Если не хочется - std::wstring лучшее решение.
А как с ним работать? Как его объявить, чтобы можно было присвоить ему слово из файла? Используя fstream

C++
1
2
3
4
5
6
7
8
9
10
std::wstring NameOfFile;
std::wstream SysFile = L"setting.tal"
 
main()
{
 
wifstream SysFile;
    SysFile.open(Name_Sys_File);
     SysFile>>NameOfFile;
}
Оператор потока чтения из файла подчеркивает красным
0
Tulosba
:)
Эксперт С++
4748 / 3242 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
28.01.2014, 17:04 #9
Цитата Сообщение от casper007 Посмотреть сообщение
Оператор потока чтения из файла подчеркивает красным
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <fstream>
#include <string>
 
std::wstring Item;
std::string SysFile = "setting.tal";
 
int main()
{
   std::wifstream SysStream(SysFile);
   SysStream>>Item;
}
1
28.01.2014, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:04

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при...

Как инициализировать this внутри класса
Доброго времени суток. Подскажите пожалуйста, как решить данную проблему. ...

Как инициализировать статические члены класса
Помогите пожалуйста....я не знаю как вывести в статическое поле значения((( ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru