реклама на сайте
подробности

 
 
> Keil. Создание классов.
Вячик13
сообщение Jan 24 2012, 06:31
Сообщение #1


Участник
*

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



Прошу поделится опытом создания классов в Си++. Попытался использовать классы в своей программе, но не получилось, поскольку при выполнении программы выскочило сообщение об отсутствии конструктора по умолчанию. Причём, как при статическом, так и при динамическом создании. Когда пишешь для компьютера, например под Дельфи, над таким вопросом как-то не задумываешься, поскольку там конструктор по умолчанию подключается автоматически или в конструкторе класса одной строкой "inherited Create".
Каким образом это делается под Keil или под IAR? Пожалуйста, если можно, с примерами исходников.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
sparcmaster
сообщение Jan 24 2012, 07:08
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333



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

А примеры, которые идут с компиляторами, не устраивают?
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jan 24 2012, 07:24
Сообщение #3


Участник
*

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



Цитата(sparcmaster @ Jan 24 2012, 09:08) *
А примеры, которые идут с компиляторами, не устраивают?


Устроили бы. Я просмотрел поисковиком всю директорию в поисках слова "class", но попадается в основном либо в комментариях либо в определениях. Если можете, укажите, пожалуйста, конкретный пример.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jan 24 2012, 08:17
Сообщение #4


Adept
******

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



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

Keil или IAR тут не причём, есть требования языка С++. У вас, очевидно, есть конструктор с аргументами, но нет конструктора по умолчанию (без аргументов), но объявление объекта производится без аргументов, т.е. компилятор должен использовать соответствующий конструктор, которого нет. Если объявляете пользовательские конструкторы, то если предполагается использование объявления объектов без аргументов, то должен быть определён соответствующий конструктор, в противном случае компилятор полагает, что такое использование объектов не разрешено и аргументы конструктора должны быть указаны.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
demitar
сообщение Jan 24 2012, 08:19
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jan 24 2012, 08:26
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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);

либо конструктор вообще объявлен в защищенной секции и доступ к нему просто так отсутствует


Спасибо, судя по всему, моя ошибка именно в этом. Кстати, при статическом создании класса память под него отводится компилятором? А при динамическом создании как?
Go to the top of the page
 
+Quote Post
demitar
сообщение Jan 24 2012, 08:41
Сообщение #7


Участник
*

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



в общем случае тут нет однозначного ответа: у оператора new два вида
если это просто new Object(), то память выделяется в куче
если new(Pointer) Object(), то память уже выделена (на нее указывает Pointer) и new просто размещает объект по данному адресу

А еще new может быть перегружен классе, и как там память выделяется только одному автору известно.

Лучше почитайте какой-нибудь учебник по с++ все сразу станет намного понятнее.
Go to the top of the page
 
+Quote Post
sparcmaster
сообщение Jan 24 2012, 10:12
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333



Цитата(Вячик13 @ Jan 24 2012, 11:24) *
Устроили бы. Я просмотрел поисковиком всю директорию в поисках слова "class", но попадается в основном либо в комментариях либо в определениях. Если можете, укажите, пожалуйста, конкретный пример.

\Keil\ARM\Examples\C++
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01406 секунд с 7
ELECTRONIX ©2004-2016