|
Keil. Создание классов. |
|
|
|
Jan 24 2012, 06:31
|
Участник

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604

|
Прошу поделится опытом создания классов в Си++. Попытался использовать классы в своей программе, но не получилось, поскольку при выполнении программы выскочило сообщение об отсутствии конструктора по умолчанию. Причём, как при статическом, так и при динамическом создании. Когда пишешь для компьютера, например под Дельфи, над таким вопросом как-то не задумываешься, поскольку там конструктор по умолчанию подключается автоматически или в конструкторе класса одной строкой "inherited Create". Каким образом это делается под Keil или под IAR? Пожалуйста, если можно, с примерами исходников.
|
|
|
|
|
 |
Ответов
(1 - 7)
|
Jan 24 2012, 07:08
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

|
Цитата(Вячик13 @ Jan 24 2012, 10:31)  Прошу поделится опытом создания классов в Си++. Попытался использовать классы в своей программе, но не получилось, поскольку при выполнении программы выскочило сообщение об отсутствии конструктора по умолчанию. Причём, как при статическом, так и при динамическом создании. Когда пишешь для компьютера, например под Дельфи, над таким вопросом как-то не задумываешься, поскольку там конструктор по умолчанию подключается автоматически или в конструкторе класса одной строкой "inherited Create". Каким образом это делается под Keil или под IAR? Пожалуйста, если можно, с примерами исходников. А примеры, которые идут с компиляторами, не устраивают?
|
|
|
|
|
Jan 24 2012, 07:24
|
Участник

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604

|
Цитата(sparcmaster @ Jan 24 2012, 09:08)  А примеры, которые идут с компиляторами, не устраивают? Устроили бы. Я просмотрел поисковиком всю директорию в поисках слова "class", но попадается в основном либо в комментариях либо в определениях. Если можете, укажите, пожалуйста, конкретный пример.
|
|
|
|
|
Jan 24 2012, 08:17
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (Вячик13 @ Jan 24 2012, 13:31)  Прошу поделится опытом создания классов в Си++. Попытался использовать классы в своей программе, но не получилось, поскольку при выполнении программы выскочило сообщение об отсутствии конструктора по умолчанию. Причём, как при статическом, так и при динамическом создании. Когда пишешь для компьютера, например под Дельфи, над таким вопросом как-то не задумываешься, поскольку там конструктор по умолчанию подключается автоматически или в конструкторе класса одной строкой "inherited Create". Каким образом это делается под Keil или под IAR? Пожалуйста, если можно, с примерами исходников. Keil или IAR тут не причём, есть требования языка С++. У вас, очевидно, есть конструктор с аргументами, но нет конструктора по умолчанию (без аргументов), но объявление объекта производится без аргументов, т.е. компилятор должен использовать соответствующий конструктор, которого нет. Если объявляете пользовательские конструкторы, то если предполагается использование объявления объектов без аргументов, то должен быть определён соответствующий конструктор, в противном случае компилятор полагает, что такое использование объектов не разрешено и аргументы конструктора должны быть указаны.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jan 24 2012, 08:19
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-09-09
Пользователь №: 52 170

|
у Вас конструктор класса объявлен c параметрами, вроде этого CODE class name { public: name(t1 p1, t2 p2, t3 p3); };
соответственно создавать экземпляр надо так: name inst(1, 2, 3, 4); или name *inst = new name(p1, p2, p3, p4); либо конструктор вообще объявлен в защищенной секции и доступ к нему просто так отсутствует
Сообщение отредактировал demitar - Jan 24 2012, 08:20
|
|
|
|
|
Jan 24 2012, 08:26
|
Участник

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604

|
Цитата(demitar @ Jan 24 2012, 10:19)  у Вас конструктор класса объявлен c параметрами, вроде этого CODE class name { public: name(t1 p1, t2 p2, t3 p3); };
соответственно создавать экземпляр надо так: name inst(1, 2, 3, 4); или name *inst = new name(p1, p2, p3, p4); либо конструктор вообще объявлен в защищенной секции и доступ к нему просто так отсутствует Спасибо, судя по всему, моя ошибка именно в этом. Кстати, при статическом создании класса память под него отводится компилятором? А при динамическом создании как?
|
|
|
|
|
Jan 24 2012, 08:41
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-09-09
Пользователь №: 52 170

|
в общем случае тут нет однозначного ответа: у оператора new два вида если это просто new Object(), то память выделяется в куче если new(Pointer) Object(), то память уже выделена (на нее указывает Pointer) и new просто размещает объект по данному адресу
А еще new может быть перегружен классе, и как там память выделяется только одному автору известно.
Лучше почитайте какой-нибудь учебник по с++ все сразу станет намного понятнее.
|
|
|
|
|
Jan 24 2012, 10:12
|
Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333

|
Цитата(Вячик13 @ Jan 24 2012, 11:24)  Устроили бы. Я просмотрел поисковиком всю директорию в поисках слова "class", но попадается в основном либо в комментариях либо в определениях. Если можете, укажите, пожалуйста, конкретный пример. \Keil\ARM\Examples\C++
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|