roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 08:30

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 05 сен 2013, 22:42 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
в данном случае new. а так, есть варианты, где и как может быть заныкано создание инстанса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 06 сен 2013, 09:31 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Второй случай.

В приведенном примере на С# код по факту СОВСЕМ другой - у Class2 есть неявный дефолтный конструктор. Добавьте туда что-то типа
Код:
public class Class2(int param)
{}

т.е. явный недефолтный конструктор(тем самым уничтожив неявный дефолтный), и все обломится.

И таки да, в C++ с конструкторами и наследованием полная кхм... То есть там все логично, но уж очень наворочено. C# и Java запилили во многом из-за этого.
Для полной ясности:
Код:
class Class1
{
public:
Class1();
Ultrasonic sonar;
}

заставляет компилятор сделать такое(java-подобный псевдокод)
Код:
Class1::Class1()
{
   super();
   sonar = new Ultrasonic();
}

и тут - оппачки, а Ultrasonic::Ultrasonic()- то и нету, о чем и было доложено.

Добавлено спустя 6 минут 10 секунд:
Romikgy писал(а):
зачем равнять то, где памяти для выполнения и скорости в достатке , с тем где не памяти нормально , ни скорости ... возьмите тогда ARM и там будет все вплоть до дот нета....

Я согласен с Арамисом. С++ а аврах - изврат, для программ с ООП нужно больше ресурсов, упретесь быстро в дифицит памяти. Возьмите дешевый ARM, цена будет та же, зато ресурсов больше, и языки на любой вкус.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 06 сен 2013, 11:29 
Не в сети

Зарегистрирован: 04 май 2013, 10:35
Сообщения: 203
Откуда: Тюмень
sergKyrnosov во втором случае если считать что _var1 - указатель, то оба варианта вызывают конструктор класса (который и инициализирует вновь создаваемый объект)

Если же во втором случае не указатель, то это приведёт к ошибке компиляции.

А вообще приведи код из Ultrasonic.h


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 06 сен 2013, 16:37 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
RoboHobbyRu, очень похоже, что это был кусочек кода из приведенного ранее примера на шарпе. в шарпе указателей в том виде, как они существуют в си или ++, нет - есть ссылочные типы и типы значений. указатели как таковые доступны или в небезопастном/неуправляемом коде или если осущствлять преобразование указатьль-обджект. с таблетачкой "копай" доступны и прочие плюшки - вызов любых ф-ий (stdcall, cdecl и прочих), нативный процессорный код (cpu/fpu/gpu/...) и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 08 сен 2013, 14:11 
Не в сети

Зарегистрирован: 04 май 2013, 10:35
Сообщения: 203
Откуда: Тюмень
да, это я не до понял.

По первому посту могу сказать следующее:
Т.к. компилятор предложил в качестве кандидата конструктор
Ultrasonic::Ultrasonic(int, int)
это значит, что человек описал его.
Но по стандарту Си++, если человек создал руками хоть один конструктор, то компилятор беолее не предоставляет конструктор по умолчанию (Ultrasonic::Ultrasonic() ) считая, что человек знает что делает.
Самый простой способ выйти из этого положения создать его самостоятельно:
Ultrasonic::Ultrasonic(){}
(если такой конструктор по смыслу допустим)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Программирование клссов для ардуино
СообщениеДобавлено: 27 сен 2013, 01:51 
Не в сети
Аватара пользователя

Зарегистрирован: 13 июл 2012, 07:32
Сообщения: 18
Откуда: Киев
Skype: max.lunin
прог. языки: C, C++, Objective-C
ФИО: Макс Лунин
Компилятор подсказывает, что конструкторов без параметров для этого класса не задано. Есть только конструктор с двумя интовыми переменными.
Поскольку конструктор копирования для этого класса задан (его мы тоже видим в ошибке), то самый простой и правильный способ - это передать нужные параматры в конструкторе:
Код:
#define firstIntParameter = …
#define secondIntParameter = …

class Class1
{
  Ultrasonic sonar;
public:
  // в конструкторе, после ":" можно инициализировать переменные класса:
  Class1() : sonar( Ultrasonic(firstIntParameter, secondIntParameter) )
  { /* здесь остальная инициализация */ };
};

_________________
Hex, Bugs & Source control !

Блог о выращивании экзотических растений :http://exotic-garden-at-home.blogspot.com


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO