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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
Члены класса инициализируйте в конструкторе.
В принципе, так как в примере инициализация по дефолту, то можно вообще не обьявлять. Будет статический обьект.
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 817
Регистрация: 27.09.2012
Сообщений: 18,060
Записей в блоге: 3
Завершенные тесты: 1
19.04.2016, 13:42     Ошибка инициализации классов #4
Цитата Сообщение от maxm Посмотреть сообщение
Будет статический обьект.
в каком месте он статический?
Цитата Сообщение от maxm Посмотреть сообщение
так как в примере инициализация по дефолту, то можно вообще не обьявлять
Во-первых, где и что по дефолту? Не вижу.
Во-вторых, как инициализация связана с объявлением?
maxm
60 / 32 / 8
Регистрация: 17.07.2014
Сообщений: 436
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
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 817
Регистрация: 27.09.2012
Сообщений: 18,060
Записей в блоге: 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(); //Объект со всеми потрохами будет иметь динамическое время хранения
   //...
}
maxm
60 / 32 / 8
Регистрация: 17.07.2014
Сообщений: 436
19.04.2016, 14:09     Ошибка инициализации классов #7
Цитата Сообщение от Croessmah Посмотреть сообщение
статический член класса - это static.
Я плохо выразился, я имел ввиду обьект на стеке
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 14:09     Ошибка инициализации классов
Еще ссылки по теме:

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

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

Ошибка при инициализации строки - C++
У меня почему-то компилятор очень сильно ругает пример из книги Герберта Шилдта «Полный справочник по C++». #include <iostream> ...

Ошибка при инициализации массива - C++
В примере есть массив: sf::String TileMap = { " ", " ...


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

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт CЭксперт С++
13056 / 7319 / 817
Регистрация: 27.09.2012
Сообщений: 18,060
Записей в блоге: 3
Завершенные тесты: 1
19.04.2016, 14:09     Ошибка инициализации классов #8
Цитата Сообщение от maxm Посмотреть сообщение
Я плохо выразился, я имел ввиду обьект на стеке
Опять же плохо
Цитата Сообщение от Croessmah Посмотреть сообщение
зависеть от того, где создан объект
Yandex
Объявления
19.04.2016, 14:09     Ошибка инициализации классов
Ответ Создать тему
Опции темы

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