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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 395
#1

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

28.01.2014, 14:03. Просмотров 342. Ответов 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 (не разрешено инициализировать */
};
Где тогда инициализировать? В конструкторе инициализация не удается, пишет, что значение должно меняться левостороне.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 14:03     Где инициализировать переменные класса?
Посмотрите здесь:

Как правильно инициализировать статические члены класса? C++
C++ Где инициализировать члены класса CTreeCtrl?
Можно ли инициализировать static член класса функцией? C++
C++ Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
STL(map). Где инициализировать массив? C++
Где инициализировать константные данные класса? C++
Как инициализировать this внутри класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 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;
};
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 395
28.01.2014, 14:36  [ТС]     Где инициализировать переменные класса? #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Primer(): name(L"name_name") {}
Я раньше не видел такой конструкции. Двоеточие - это какой-то оператор?
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.01.2014, 14:36     Где инициализировать переменные класса? #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ну почему же?
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 395
28.01.2014, 14:43  [ТС]     Где инициализировать переменные класса? #5
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
то есть, нужно использовать wstring? почему не стоит использовать wchar_t*?
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
28.01.2014, 14:45     Где инициализировать переменные класса? #6
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
Да. Все именно так. Думал так будет нагляднее.
Цитата Сообщение от casper007 Посмотреть сообщение
Я раньше не видел такой конструкции.
Это инициализация членов класса списком параметров.
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.01.2014, 14:45     Где инициализировать переменные класса? #7
Цитата Сообщение от casper007 Посмотреть сообщение
нужно использовать wstring? почему не стоит использовать wchar_t*?
Если хочется самому управлять памятью, то, пожалуйста, используйте wchar_t* явно. Если не хочется - std::wstring лучшее решение.
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 395
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;
}
Оператор потока чтения из файла подчеркивает красным
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:04     Где инициализировать переменные класса?
Еще ссылки по теме:

C++ Как инициализировать переменные?
C++ Не могу инициализировать переменные класса
Как правильно инициализировать динамический массив пользовательского класса C++
C++ С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса
Как инициализировать статические члены класса C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4391 / 3234 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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;
}
Yandex
Объявления
28.01.2014, 17:04     Где инициализировать переменные класса?
Ответ Создать тему
Опции темы

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