roboforum.ru

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

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

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

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

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

Alex080969 » 05 сен 2013, 09:36

а нафига темы плодить то?

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

sergKyrnosov » 05 сен 2013, 09:50

Когда отправлял сообщение на форум то оно не отправлялось никак нажал несколько раз на отправить вот оно наверное и наплодилось

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

Angel71 » 05 сен 2013, 10:16


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

elmot » 05 сен 2013, 10:20

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

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

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

Angel71 » 05 сен 2013, 10:33


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

sergKyrnosov » 05 сен 2013, 11:12

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

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


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

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

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

Angel71 » 05 сен 2013, 13:14

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

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

elmot » 05 сен 2013, 15:17

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

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

Это не переменная ссылка, это сам объект. У внешнего класса есть конструктор(дефолтный или явный), он в явном или неявном виде вызывает конструкторы суперклассов и вложенных полей. Одного из конструкторов нету. Вот и ой.

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

sergKyrnosov » 05 сен 2013, 15:50

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


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

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

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

Может я где то не прав.

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

elmot » 05 сен 2013, 16:15

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

Читайте Страуструпа, короче.

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
{

}

}

Все работает, вроде

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

Romikgy » 05 сен 2013, 18:52

зачем равнять то, где памяти для выполнения и скорости в достатке , с тем где не памяти нормально , ни скорости ... возьмите тогда ARM и там будет все вплоть до дот нета....

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

Angel71 » 05 сен 2013, 19:07

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

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

как на фото - этот не подходит и этот и тот,... да ну ёпрст... вот вам компилятор всё правильно и выдал "что вы мне подсунули? пЭрЭдЭлать!"

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

sergKyrnosov » 05 сен 2013, 22:29

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

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

заранее спасибо


Rambler\'s Top100 Mail.ru counter