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

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

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

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

28.01.2014, 14:03. Просмотров 353. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Где инициализировать переменные класса? (C++):

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

Где инициализировать члены класса CTreeCtrl? - C++
В диалоговом окне, например, оконные члены класса инициализируются в OnInitDialog(). Мне нужно получить буквы всех дисков, которые уже...

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

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

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

Как инициализировать this внутри класса - C++
Доброго времени суток. Подскажите пожалуйста, как решить данную проблему. struct Test { void F() { this = new Test; //Как...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 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
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
28.01.2014, 14:36  [ТС] #3
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Primer(): name(L"name_name") {}
Я раньше не видел такой конструкции. Двоеточие - это какой-то оператор?
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.01.2014, 14:36 #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ну почему же?
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
1
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
28.01.2014, 14:43  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
то есть, нужно использовать wstring? почему не стоит использовать wchar_t*?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
28.01.2014, 14:45 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
wchar_t* и WCHAR name[20] не одно и то же.
Для заполнения строкового массива в конструкторе следует использовать strcpy-подобные функции.
Да. Все именно так. Думал так будет нагляднее.
Цитата Сообщение от casper007 Посмотреть сообщение
Я раньше не видел такой конструкции.
Это инициализация членов класса списком параметров.
1
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.01.2014, 14:45 #7
Цитата Сообщение от casper007 Посмотреть сообщение
нужно использовать wstring? почему не стоит использовать wchar_t*?
Если хочется самому управлять памятью, то, пожалуйста, используйте wchar_t* явно. Если не хочется - std::wstring лучшее решение.
1
casper007
67 / 67 / 22
Регистрация: 12.12.2013
Сообщений: 400
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
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 17:04
Привет! Вот еще темы с ответами:

Как инициализировать строковой член класса? - C++
Доброго времени. Подскажите, пожалуйста, как инициализировать строковую переменную класса, используя конструктор? #include &lt;iostream&gt; ...

Как инициализировать статические члены класса - C++
Помогите пожалуйста....я не знаю как вывести в статическое поле значения((( #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include...

С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;math.h&quot; using namespace std; class fun { double t = 0, x = 0, y = 0, z =...

Можно ли инициализировать static член класса функцией? - C++
Сабж. Конкретно - в классе есть static член типа SYSTEM_INFO (Windows.h), а мне нужно его инициализировать с помощью функции GetSystemInfo.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.01.2014, 17:04
Ответ Создать тему
Опции темы

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