С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 1
Регистрация: 16.05.2014
Сообщений: 23
1

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

19.04.2016, 13:15. Показов 1251. Ответов 7

Author24 — интернет-сервис помощи студентам
Доброго времени суток,
Я в основном программирую на 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++ отвечает ошибкой инициализации.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2016, 13:15
Ответы с готовыми решениями:

Ошибка в инициализации базовых классов
Привет. Пишу код из книги Лафоре. #include <iostream> using namespace std; #include...

Есть ли способ хранить массив классов без инициализации (хранить только их заголовки)?
Есть ли способ хранить массив классов без инициализации, а только их заголовки и в нужный момент...

Открыл данную программу на другом компьютере, она не запустилась. Выходит такая ошибка " Ошибка инициализации
Я по этой ссылке http://basicsprog.ucoz.ru/publ/6-1-0-17 разработал МП3-Плеер, сделал все как надо,...

Ошибка инициализации
Помогите пожалуйста исправить ошибку в этой программе #include <iostream> using namespace std;...

7
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
19.04.2016, 13:33 2
Лучший ответ Сообщение было отмечено Ruins007 как решение

Решение

Члены класса инициализируйте в конструкторе.
Например:
C++
1
2
    MyClass2 * mc2; 
    MyClass(): mc2(new MyClass2()){}

P.S. и классы наоборот
1
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
19.04.2016, 13:37 3
Цитата Сообщение от Ruins007 Посмотреть сообщение
MyClass2 * mc2 = *new MyClass2();
Уберите эту строчку вообще.

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Члены класса инициализируйте в конструкторе.
В принципе, так как в примере инициализация по дефолту, то можно вообще не обьявлять. Будет статический обьект.
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
19.04.2016, 13:42 4
Цитата Сообщение от maxm Посмотреть сообщение
Будет статический обьект.
в каком месте он статический?
Цитата Сообщение от maxm Посмотреть сообщение
так как в примере инициализация по дефолту, то можно вообще не обьявлять
Во-первых, где и что по дефолту? Не вижу.
Во-вторых, как инициализация связана с объявлением?
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
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. Он будет статическим в плане того, что не динамическим ))) То есть, на стеке
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 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(); //Объект со всеми потрохами будет иметь динамическое время хранения
   //...
}
1
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
19.04.2016, 14:09 7
Цитата Сообщение от Croessmah Посмотреть сообщение
статический член класса - это static.
Я плохо выразился, я имел ввиду обьект на стеке
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
19.04.2016, 14:09 8
Цитата Сообщение от maxm Посмотреть сообщение
Я плохо выразился, я имел ввиду обьект на стеке
Опять же плохо
Цитата Сообщение от Croessmah Посмотреть сообщение
зависеть от того, где создан объект
0
19.04.2016, 14:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2016, 14:09
Помогаю со студенческими работами здесь

Ошибка инициализации
Доброго времени суток! У меня такая проблема, создал небольшой проект в windows forms, ну мой...

Ошибка инициализации
Подскажите,пожалуйста. В чём могла быть ошибка.... Зарегистрировалась на форуме,который так же...

Ошибка в инициализации
Пишет ошибка при инициализировании min Помогите, пожалуйста #include <iostream> #include...

Ошибка инициализации
При такой инициализации вылезают ошибки: error C2064: term does not evaluate to a function...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru