roboforum.ru

Технический форум по робототехнике.


Программирование клссов для ардуино

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Программирование клссов для ардуино

Сообщение Angel71 » 05 сен 2013, 22:42

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

Re: Программирование клссов для ардуино

Сообщение elmot » 06 сен 2013, 09:31

Второй случай.

В приведенном примере на С# код по факту СОВСЕМ другой - у 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, цена будет та же, зато ресурсов больше, и языки на любой вкус.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Программирование клссов для ардуино

Сообщение RoboHobbyRu » 06 сен 2013, 11:29

sergKyrnosov во втором случае если считать что _var1 - указатель, то оба варианта вызывают конструктор класса (который и инициализирует вновь создаваемый объект)

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

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

Re: Программирование клссов для ардуино

Сообщение Angel71 » 06 сен 2013, 16:37

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

Re: Программирование клссов для ардуино

Сообщение RoboHobbyRu » 08 сен 2013, 14:11

да, это я не до понял.

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

Re: Программирование клссов для ардуино

Сообщение nut.code.monkey » 27 сен 2013, 01:51

Компилятор подсказывает, что конструкторов без параметров для этого класса не задано. Есть только конструктор с двумя интовыми переменными.
Поскольку конструктор копирования для этого класса задан (его мы тоже видим в ошибке), то самый простой и правильный способ - это передать нужные параматры в конструкторе:
Код: Выделить всёРазвернуть
#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
Аватара пользователя
nut.code.monkey
 
Сообщения: 18
Зарегистрирован: 13 июл 2012, 07:32
Откуда: Киев
Skype: max.lunin
прог. языки: C, C++, Objective-C
ФИО: Макс Лунин

Пред.

Вернуться в Arduino и другие Xduino

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

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