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

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

Восстановить пароль Регистрация
 
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
28.01.2014, 14:03     Где инициализировать переменные класса? #1
Почему я не могу инициализировать переменную непосредственно в описании класса?

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?
C++ Глобальные переменные в методе класса
Можно ли инициализировать static член класса функцией? C++
C++ Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 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
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
28.01.2014, 14:36  [ТС]     Где инициализировать переменные класса? #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Primer(): name(L"name_name") {}
Я раньше не видел такой конструкции. Двоеточие - это какой-то оператор?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.01.2014, 14:36     Где инициализировать переменные класса? #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ну почему же?
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
28.01.2014, 14:43  [ТС]     Где инициализировать переменные класса? #5
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
то есть, нужно использовать wstring? почему не стоит использовать wchar_t*?
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
28.01.2014, 14:45     Где инициализировать переменные класса? #6
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
Да. Все именно так. Думал так будет нагляднее.
Цитата Сообщение от casper007 Посмотреть сообщение
Я раньше не видел такой конструкции.
Это инициализация членов класса списком параметров.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.01.2014, 14:45     Где инициализировать переменные класса? #7
Цитата Сообщение от casper007 Посмотреть сообщение
нужно использовать wstring? почему не стоит использовать wchar_t*?
Если хочется самому управлять памятью, то, пожалуйста, используйте wchar_t* явно. Если не хочется - std::wstring лучшее решение.
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
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     Где инициализировать переменные класса?
Еще ссылки по теме:

STL(map). Где инициализировать массив? C++
Где инициализировать константные данные класса? C++
Как инициализировать this внутри класса C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 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     Где инициализировать переменные класса?
Ответ Создать тему
Опции темы

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