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

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

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

Сообщение sergKyrnosov » 05 сен 2013, 09:33

Хочу сделать класс в котором одно из свойств является другим классом.

#include "Arduino.h"
#include "Ultrasonic.h"

class Class1
{
public:
Class1();
void AsseptSonar(int pinTriger, int pinEcho);
long GetSonarDistans();
private:
int _pinSonarTriger;
int _pinSonarEcho;
Ultrasonic sonar;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
В этом месте ругается
:
Class1.cpp:5: error: no matching function for call to 'Ultrasonic::Ultrasonic()'
/Ultrasonic.h:21: note: candidates are: Ultrasonic::Ultrasonic(int, int)
/Ultrasonic.h:19: note: Ultrasonic::Ultrasonic(const Ultrasonic&)

Как правильно определять типы свойств классов которые являются другими классами?

};
#endif
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов

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

Сообщение Alex080969 » 05 сен 2013, 09:36

а нафига темы плодить то?
Первая заповедь радиотехника - почисти контакты!
Аватара пользователя
Alex080969
 
Сообщения: 763
Зарегистрирован: 10 ноя 2009, 13:13
Откуда: Красноярск
прог. языки: С++, Delphi, PHP, SQL, 1C
ФИО: Александр

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

Сообщение sergKyrnosov » 05 сен 2013, 09:50

Когда отправлял сообщение на форум то оно не отправлялось никак нажал несколько раз на отправить вот оно наверное и наплодилось
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов


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

Сообщение elmot » 05 сен 2013, 10:20

Очевидно хочет дефолтный конструктор(который без параметров) в классе Ultrasonic.
Если таковой добавить невозможно, то можно попробовать добавить во все конструкторы Class1 явные вызовы конструкторов Ultrasonic.

ЗЫ. C++ на 8мибитниках - извращение. ИМХО.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья


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

Сообщение sergKyrnosov » 05 сен 2013, 11:12

elmot писал(а):Очевидно хочет дефолтный конструктор(который без параметров) в классе Ultrasonic.
Если таковой добавить невозможно, то можно попробовать добавить во все конструкторы Class1 явные вызовы конструкторов Ultrasonic.

ЗЫ. C++ на 8мибитниках - извращение. ИМХО.


странно при определении переменной зачем нужен конструктор.

Конструктор нужен при ее создании.
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов

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

Сообщение Angel71 » 05 сен 2013, 13:14

:crazy: жесть. хорошо, допустим вы где-то отрыли тупейше-припримитивнейший компилятор, он вам откомпилил этот недокод и при исполнении доходит до создания объёкта, опа, а конструктора та нет.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18

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

Сообщение elmot » 05 сен 2013, 15:17

sergKyrnosov писал(а):странно при определении переменной зачем нужен конструктор.

Конструктор нужен при ее создании.

Это не переменная ссылка, это сам объект. У внешнего класса есть конструктор(дефолтный или явный), он в явном или неявном виде вызывает конструкторы суперклассов и вложенных полей. Одного из конструкторов нету. Вот и ой.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

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

Сообщение sergKyrnosov » 05 сен 2013, 15:50

Angel71 писал(а)::crazy: жесть. хорошо, допустим вы где-то отрыли тупейше-припримитивнейший компилятор, он вам откомпилил этот недокод и при исполнении доходит до создания объёкта, опа, а конструктора та нет.


При определении переменной выделяется всего лишь память.
При ее создании уже происходит инициализация.

Даже в томже C#

когда вы определяете переменную, то вроде никаких конструкторов не вызывается.
А потом когда New тогда и конструкторы работают

Может я где то не прав.
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов

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

Сообщение elmot » 05 сен 2013, 16:15

Конечно не прав. Компилятор валится с этими матюгами ДО создания переменной, ДО выделения памяти, и даже ДО запуска программы, а еще на фазе построения кода класса, в compile time. Ему не хватает метода, он и ругается.

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

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

Сообщение sergKyrnosov » 05 сен 2013, 16:59

Вот код на C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication14
{
class Program
{
static void Main(string[] args)
{
Class1 per1;
per1 = new Class1();
}
}


class Class1
{
Class2 _var1;
public Class1()
{
_var1 = new Class2();
}

}

class Class2
{

}

}

Все работает, вроде
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов

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

Сообщение Romikgy » 05 сен 2013, 18:52

зачем равнять то, где памяти для выполнения и скорости в достатке , с тем где не памяти нормально , ни скорости ... возьмите тогда ARM и там будет все вплоть до дот нета....
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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

Сообщение Angel71 » 05 сен 2013, 19:07

sergKyrnosov писал(а):Даже в томже C#
когда вы определяете переменную, то вроде никаких конструкторов не вызывается.
А потом когда New тогда и конструкторы работают
Может я где то не прав.

это же азы :) не важно, прописали ли вы явно в классе конструктор или нет, паблик он, статик или ещё какой, но он ВСЕГДА ЕСТЬ. в шарпе любой класс по иерахрхии всегда восходит к обджекту, у которого опять таки есть конструктор. не верите, так почитайте самоучители, мсдн, пройдитесь дебаггером или натравите дизассемблер (как увидите ".ctor", так знайте, что это и есть конструктор). проехали с шарпом, это совсем другой язык.
:) в данном случае вам компилятор сразу и выдал, что он не может найти нужный конструктор. как вы себе представляете инициализацию класса, если компилятор в недоумении репу чешит, какой же конструктор использовать?
demotivators.jpg

как на фото - этот не подходит и этот и тот,... да ну ёпрст... вот вам компилятор всё правильно и выдал "что вы мне подсунули? пЭрЭдЭлать!"
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18

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

Сообщение sergKyrnosov » 05 сен 2013, 22:29

если можно для общего развития объясните: инициализация класса когда происходит,
когда определяет перемен ную
Class2 _var1

или тут
_var1 = new Class2();

заранее спасибо
sergKyrnosov
 
Сообщения: 157
Зарегистрирован: 02 апр 2012, 12:24
Откуда: г.Астрахань
прог. языки: 1С, С#
ФИО: Сергей Курносов

След.

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

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

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