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

Ошибка инициализации классов - C++

Восстановить пароль Регистрация
 
Ruins007
0 / 0 / 0
Регистрация: 16.05.2014
Сообщений: 16
19.04.2016, 13:15     Ошибка инициализации классов #1
Доброго времени суток,
Я в основном программирую на C#, но вот решил попробовать плюсы. И облом при первой же попытке, в шарпе при объявлении класса я пишу

C#
1
2
3
4
5
6
7
8
class MyClass1
{
    MyClass2 mc2 = new MyClass2();
}
class MyClass2
{
    ...
}
в плюсах я сидя на винде и vs2013, я ввожу слово class и он автоматический выдаёт мне форму, дальше меняя по своему получается вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
 
using namespace std;
 
class MyClass
{
public:
    MyClass2 * mc2 =  new MyClass2();
 
    MyClass();
    ~MyClass();
};
class MyClass2
{
public:
    int a, b, c;
 
    MyClass2();
    ~MyClass2();
 
};
при компиляции выдаёт ошибку C2146 и C4430, говоря при этом что у меня перед именем поля не стоит ";".
Насколько я понимаю точка с запятой тут ни причём, и всякие * и & ничего не меняют. По странным обстоятельствам гугль играет в партизана, а из меня гестапа никакой, я понимаю что очевидного не замечаю и ответ где то совсем рядом, но мозг как и vc++ отвечает ошибкой инициализации.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2016, 13:15     Ошибка инициализации классов
Посмотрите здесь:

Ошибка инициализации bool*** C++
C++ Ошибка инициализации
Ошибка инициализации двумерного массива C++
C++ Ошибка инициализации
Ошибка в инициализации базовых классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
19.04.2016, 13:33     Ошибка инициализации классов #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Члены класса инициализируйте в конструкторе.
Например:
C++
1
2
    MyClass2 * mc2; 
    MyClass(): mc2(new MyClass2()){}

P.S. и классы наоборот
maxm
 Аватар для maxm
33 / 20 / 6
Регистрация: 17.07.2014
Сообщений: 351
19.04.2016, 13:37     Ошибка инициализации классов #3
Цитата Сообщение от Ruins007 Посмотреть сообщение
MyClass2 * mc2 = *new MyClass2();
Уберите эту строчку вообще.

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Члены класса инициализируйте в конструкторе.
В принципе, так как в примере инициализация по дефолту, то можно вообще не обьявлять. Будет статический обьект.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
19.04.2016, 13:42     Ошибка инициализации классов #4
Цитата Сообщение от maxm Посмотреть сообщение
Будет статический обьект.
в каком месте он статический?
Цитата Сообщение от maxm Посмотреть сообщение
так как в примере инициализация по дефолту, то можно вообще не обьявлять
Во-первых, где и что по дефолту? Не вижу.
Во-вторых, как инициализация связана с объявлением?
maxm
 Аватар для maxm
33 / 20 / 6
Регистрация: 17.07.2014
Сообщений: 351
19.04.2016, 14:02     Ошибка инициализации классов #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
using namespace std;
class MyClass
{
public:
* * MyClass2 obj; // 1
    MyClass();
* * ~MyClass();
};
class MyClass2
{
public:
* * int a, b, c;
    MyClass2(); //2
* * ~MyClass2();
};
В точке 1, при вызове конструктора MyClass, будет создан экземпляр MyClass2 под именем obj. Он будет статическим в плане того, что не динамическим ))) То есть, на стеке
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
19.04.2016, 14:07     Ошибка инициализации классов #6
Цитата Сообщение от maxm Посмотреть сообщение
В точке 1, при вызове конструктора MyClass, будет создан экземпляр MyClass2 под именем obj
В коде ТС - указатель!!!
C++
1
MyClass2 * mc2
Цитата Сообщение от maxm Посмотреть сообщение
Он будет статическим в плане того, что не динамическим
статический член класса - это static.
Никаким статическим он не будет!
А в плане динамической памяти всё тогда будет
зависеть от того, где создан объект:
C++
1
2
3
4
5
6
7
void foo()
{
   static MyClass m;//Объект со всеми потрохами будет иметь статическое время хранения
   MyClass m2;//Объект со всеми потрохами будет иметь автоматическое время хранения
   MyClass * p = new MyClass(); //Объект со всеми потрохами будет иметь динамическое время хранения
   //...
}
maxm
 Аватар для maxm
33 / 20 / 6
Регистрация: 17.07.2014
Сообщений: 351
19.04.2016, 14:09     Ошибка инициализации классов #7
Цитата Сообщение от Croessmah Посмотреть сообщение
статический член класса - это static.
Я плохо выразился, я имел ввиду обьект на стеке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 14:09     Ошибка инициализации классов
Еще ссылки по теме:

C++ Ошибка инициализации переменных
Ошибка инициализации переменной C++
Ошибка при инициализации C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
19.04.2016, 14:09     Ошибка инициализации классов #8
Цитата Сообщение от maxm Посмотреть сообщение
Я плохо выразился, я имел ввиду обьект на стеке
Опять же плохо
Цитата Сообщение от Croessmah Посмотреть сообщение
зависеть от того, где создан объект
Yandex
Объявления
19.04.2016, 14:09     Ошибка инициализации классов
Ответ Создать тему

Метки
c++, инициализация, классы
Опции темы

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