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

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


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

Keil или IAR тут не причём, есть требования языка С++. У вас, очевидно, есть конструктор с аргументами, но нет конструктора по умолчанию (без аргументов), но объявление объекта производится без аргументов, т.е. компилятор должен использовать соответствующий конструктор, которого нет. Если объявляете пользовательские конструкторы, то если предполагается использование объявления объектов без аргументов, то должен быть определён соответствующий конструктор, в противном случае компилятор полагает, что такое использование объектов не разрешено и аргументы конструктора должны быть указаны.
demitar
у Вас конструктор класса объявлен 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);

либо конструктор вообще объявлен в защищенной секции и доступ к нему просто так отсутствует
Вячик13
Цитата(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);

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


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

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

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

\Keil\ARM\Examples\C++
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.