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

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

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

Конструктор по умолчанию - C++

21.03.2013, 07:12. Просмотров 498. Ответов 5
Метки нет (Все метки)

Доброе утро!

При попытке доступа к данным-элементам объекта, созданного конструктором по умолчанию, программа загибается. Возникло подозрение, что конструктор по умолчанию своё дело не делает. Поэтому написал вот что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Class
{
public:
    int Var;
    Class ();
};
 
void main()
{
    Class Object();
    Object.Var = 1;
    cout << Object.Var;
    getchar();
}
Компилятор выдаст ошибку error C2228: выражение слева от ".Var" должно представлять класс, структуру или объединение

А вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Class
{
public:
    int Var;
    Class (int n)
    {
    };
};
 
void main()
{
    Class Object(1);
    Object.Var = 1;
    cout << Object.Var;
    getchar();
}
работает.
Конструктору непременно нужен аргумент, даже если он не собирается его использовать. Подскажите, пожалуйста, почему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2013, 07:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор по умолчанию (C++):

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Конструктор по умолчанию - C++
Здравствуйте, есть такой код: explicit RFileDownloader(QObject *parent = 0); explicit RFileDownloader(const QUrl &amp;url = QUrl(),...

5
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
21.03.2013, 07:45 #2
Цитата Сообщение от Cactoideae Посмотреть сообщение
Возникло подозрение, что конструктор по умолчанию своё дело не делает
А где вообще его реализация? Я вижу только описание. Кроме этого, объект инициализировать так нельзя (строчка 10):
C++
1
Class Object();
ибо такая запись интерпретируется компилятором как прототип функции. Поэтому компилятор и говорит:
Цитата Сообщение от Cactoideae Посмотреть сообщение
выражение слева от ".Var" должно представлять класс, структуру или объединение
Нужно так:
C++
1
Class Object;
Но чтобы это заработало, вам нужно описать реализацию конструктора.
1
SDev
43 / 41 / 10
Регистрация: 15.03.2013
Сообщений: 89
21.03.2013, 08:56 #3
в первом фрагменте в строке 5:
C++
1
Class (){};
0
Cactoideae
0 / 0 / 0
Регистрация: 17.03.2013
Сообщений: 2
21.03.2013, 15:12 #4
Цитата Сообщение от anmartex Посмотреть сообщение
А где вообще его реализация? Я вижу только описание.
Если я опишу пустой конструктор? На самом деле было (я криво перенёс):
Цитата Сообщение от SDev Посмотреть сообщение
в первом фрагменте в строке 5:
C++
1
Class (){};
Он ведь должен создать объект?

Цитата Сообщение от anmartex Посмотреть сообщение
Кроме этого, объект инициализировать так нельзя (строчка 10):
C++
1
Class Object();
ибо такая запись интерпретируется компилятором как прототип функции.
Вот это помогло, спасибо. Объясните, почему так интерпретируется? Мы же не в глобальной области.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7510 / 4642 / 700
Регистрация: 29.11.2010
Сообщений: 12,677
21.03.2013, 15:28 #5
C++
1
2
3
4
5
6
class Class
{
    public:
        int var;
        Class (int x = 0) : var(x) {}
};
А далее хоть
C++
1
2
3
Class Object;
Object.var = 1;
cout << Object.var;
хоть
C++
1
2
Class Object(1);
std::cout << Object.var;
хоть
C++
1
2
Class Object;
cout << Object.var;
P.S. читать про конструктор с аргументами по умолчанию.
1
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.03.2013, 18:27 #6
Цитата Сообщение от Cactoideae Посмотреть сообщение
Объясните, почему так интерпретируется? Мы же не в глобальной области.
Прототип может быть в любой области.
0
21.03.2013, 18:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2013, 18:27
Привет! Вот еще темы с ответами:

Конструктор по умолчанию - C++
Показывает ошибку : 1 IntelliSense: для класса &quot;tovar&quot; не существует конструктор по умолчанию Подскажите пожалуйста как сделать ...

Конструктор по умолчанию - C++
Я то ли динамику недопоняла, то ли классы, то ли конструктор... И теперь совсем запуталась. Что нужно написать в конструкторе без...

Конструктор по умолчанию - C++
Всем привет! Если в классе вообще нет конструктора, чем будут инициализироваться члены класса? И в чем отличие объект() и объект...

Конструктор по умолчанию - C++
как использовать конструктор по умолчанию в конструкторе с параметром? К по умолчанию заполняет массив заранее определёнными символами, а...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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