Композиция объектов с конструкторами в Ардуино - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть класс двигателя для моих отдельных шаговых двигателей.Сейчас я кодирую класс Motor s для синхронизации движений степперов, но у меня возникают проблемы с созданием экземпляров классов Motor внутри Motors.

Я получаю эту ошибку:

Robot:238:5: error: '((Motors*)this)->Motors::a' does not have class type
 a.enable(1); b.enable(1); c.enable(1);

Пока это мой код класса Motors:

class Motors{
public:
  Motor a(xstep, xdir, xenable, xend, true);
  Motor b(ystep, ydir, yenable, yend);
  Motor c(zstep, zdir, zenable, zend);

  Motors(){

  }

  void go_home(){
    a.enable(1); b.enable(1); c.enable(1);
    a.set_dir(0); b.set_dir(0); c.set_dir(0);
    delay(mtime) 
  }
};

Также пробовал создавать экземпляры внутри конструктора Motors, но он не работает.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019
class Motors{
public:
  Motor a = Motor(xstep, xdir, xenable, xend, amax, true);
  Motor b = Motor(ystep, ydir, yenable, yend, bmax);
  Motor c = Motor(zstep, zdir, zenable, zend, cmax);

  Motors(){

  }

  void go_home(){
    a.enable(1); b.enable(1); c.enable(1);
    a.set_dir(0); b.set_dir(0); c.set_dir(0);
    delay(mtime) 
  }
};
0 голосов
/ 04 февраля 2019

Я предполагаю, что enable и set_dir являются методами класса Motor.Таким образом, вам нужно три экземпляра Мотор в классе Мотор.Если вам подходит конструктор по умолчанию для каждого объекта Motor, вы можете инкапсулировать их следующим образом:

class Motors
{
  public:
    Motors() {
    }

    void go_home() {
      a.enable(1); b.enable(1); c.enable(1);
      a.set_dir(0); b.set_dir(0); c.set_dir(0);
      delay(mtime);
    }

  private:
    Motor a;
    Motor b;
    Motor c;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...