Конструктор класса

MsFedkin
Offline
Зарегистрирован: 12.12.2017

Всем доброго времени суток. Вот пытаюсь изучать ОПП и решил создать библиотеку для совей китайской машинки, но как всегда что-то пошло не так. У меня вылезает проблемы с конструктором: no matching function for call to 'Car::Car(int, int, int, int, int, int)'. Как я задаю конструктор:

Car car(1,2,3,4,5,6);

Это мой класс из файла с разширением ".h"  

class Car {
	
public:
   Car(uint8_t PIN1, uint8_t PIN2, uint8_t PIN3, uint8_t PIN4, uint8_t PINA, uint8_t PINB); // конструктор
   void Advance();
   void Back();
   void Right();
   void Left();
   void SetSpeed(uint8_t Speed);
   

private: 
	uint8_t IN1;
	uint8_t IN2;
	uint8_t IN3;
	uint8_t IN4;
	uint8_t ENA;
	uint8_t ENB;

};

А это код из файла с разширением "срр", вставлю только конструктор 

Car :: Car(uint8_t PIN1, uint8_t PIN2, uint8_t PIN3, uint8_t PIN4, uint8_t PINA, uint8_t PINB) {

 IN1 = PIN1;
 IN2 = PIN2;
 IN3 = PIN3;
 IN4 = PIN4;
 ENA = PINA; 
 ENB = PINB;
 
}

Расчитываю на вашу мудрость, заранее благодарю.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Полагаю, что поможет создание функции конструктора с параметрами типа int, из которого будет вызываться существующая функция конструктора с параметрами типа uint8_t.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Мда. А вопросов будет еще вагон и маленькая тележка. Классы это еще не ООП, а так же вы банально не умеете составлять библиотеки.http://arduino.ru/Hacking/LibraryTutorial

MsFedkin
Offline
Зарегистрирован: 12.12.2017

Я кстати по этому примеру делал, только с arduino.cc . А проблема была совсем в другом он не воспринимал переменные с названием PIN1,PIN2..., а вот переменные a,b,c... он сразу "понял"

Ок!

Car(uint8_t a, uint8_t b, uint8_t c, uint8_t d, uint8_t f, uint8_t h);

Не ок

Car(uint8_t PIN1, uint8_t PIN2, uint8_t PIN3, uint8_t PIN4, uint8_t PINA, uint8_t PINB);

и почему так?

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Попробуйте обходится без написания библиотек, пока не научитесь писать классы без ошибок.

/**/
class Cl_Car {
  protected:
    uint8_t in1pin;
    uint8_t in2pin;
    uint8_t in3pin;
    uint8_t in4pin;
    uint8_t ENApin;
    uint8_t ENBpin;
  public:
    Cl_Car(uint8_t Pin1, uint8_t Pin2, uint8_t Pin3, uint8_t Pin4, uint8_t PinA, uint8_t PinB); // конструктор
    void Advance();
    void Back();
    void Right();
    void Left();
    void SetSpeed(uint8_t Speed);
};
Cl_Car::Cl_Car(uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t eA, uint8_t eB)
  : in1pin(p1), in2pin(p2), in3pin(p3), in4pin(p4), ENApin(eA), ENBpin(eB) {}

void Cl_Car::Advance() {}
void Cl_Car::Back() {}
void Cl_Car::Right() {}
void Cl_Car::Left() {}
void Cl_Car::SetSpeed(uint8_t Speed) {
}

Cl_Car Car(/*in1*/2,/*in2*/3,/*in3*/4,/*in5*/5,/*enA*/6,/*enB*/7);
//----------------------------------
void setup() {
  Car.Advance();

}

void loop() {

}

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

MsFedkin пишет:

Я кстати по этому примеру делал, только с arduino.cc . А проблема была совсем в другом он не воспринимал переменные с названием PIN1,PIN2..., а вот переменные a,b,c... он сразу "понял"

Оказывается, что не только Вам нравятся такие имена, но и создателям платформы Arduino:

/* Port Input Pins (generic) */
#define    PIN7         7
#define    PIN6         6
#define    PIN5         5
#define    PIN4         4
#define    PIN3         3
#define    PIN2         2
#define    PIN1         1
#define    PIN0         0