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

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

Войти
Регистрация
Восстановить пароль
 
Ruins007
2 / 2 / 1
Регистрация: 16.05.2014
Сообщений: 20
#1

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

19.04.2016, 13:15. Просмотров 199. Ответов 7

Доброго времени суток,
Я в основном программирую на 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2016, 13:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка инициализации классов (C++):

Ошибка в инициализации базовых классов - C++
Привет. Пишу код из книги Лафоре. #include <iostream> using namespace std; #include <windows.h> enum posneg {pos, meg}; class...

Ошибка инициализации - C++
При такой инициализации вылезают ошибки: error C2064: term does not evaluate to a function taking 7 arguments IntelliSense: call of...

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

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

Ошибка инициализации переменной - C++
Подскажите, пожалуйста, как исправить ошибку инициализации vp в данном случае? По идее, в итоге должно получиться три разных значения vp. ...

Ошибка при инициализации - C++
На 3 и 4 строчку показывает отладчик при вылете. BADpixel *enemy; pixel *player; enemy = new BADpixel(75, 10, 10, player); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
19.04.2016, 13:33 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Члены класса инициализируйте в конструкторе.
Например:
C++
1
2
    MyClass2 * mc2; 
    MyClass(): mc2(new MyClass2()){}

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

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Члены класса инициализируйте в конструкторе.
В принципе, так как в примере инициализация по дефолту, то можно вообще не обьявлять. Будет статический обьект.
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
19.04.2016, 13:42 #4
Цитата Сообщение от maxm Посмотреть сообщение
Будет статический обьект.
в каком месте он статический?
Цитата Сообщение от maxm Посмотреть сообщение
так как в примере инициализация по дефолту, то можно вообще не обьявлять
Во-первых, где и что по дефолту? Не вижу.
Во-вторых, как инициализация связана с объявлением?
0
maxm
61 / 33 / 8
Регистрация: 17.07.2014
Сообщений: 441
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
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 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
maxm
61 / 33 / 8
Регистрация: 17.07.2014
Сообщений: 441
19.04.2016, 14:09 #7
Цитата Сообщение от Croessmah Посмотреть сообщение
статический член класса - это static.
Я плохо выразился, я имел ввиду обьект на стеке
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,416
Записей в блоге: 3
Завершенные тесты: 1
19.04.2016, 14:09 #8
Цитата Сообщение от maxm Посмотреть сообщение
Я плохо выразился, я имел ввиду обьект на стеке
Опять же плохо
Цитата Сообщение от Croessmah Посмотреть сообщение
зависеть от того, где создан объект
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 14:09
Привет! Вот еще темы с ответами:

Ошибка инициализации bool*** - C++
Я, похоже, совершенно не разбираюсь в указателях, так что еще один глупый вопрос: где ошибка? bool*** result_array = new...

Ошибка инициализации переменных - C++
#include <iostream> #include <math.h> #include <conio.h> using namespace std; double f(double x) { return ...

Непонятная ошибка инициализации переменной - C++
Можете объяснить плес, почему в этам коде ошипка? int x(int()); Пишет error LNK2019: ссылка на неразрешенный внешний символ...

Ошибка при инициализации массива - C++
Что делать? Так как я понимаю, точку с запятой вообще в помине не должно здесь быть!о_О


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

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

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