在Arduino中使用构造函数进行对象组合

时间:2019-02-02 17:47:02

标签: c++ arduino

我的单个步进电机有一个Motor类。现在,我正在编写Motor s 类来同步步进运动,但是在实例化Motors中的Motor类时遇到了问题。

我收到此错误:

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 :(得分:1)

我假设enableset_dir是Motor类上的方法。因此,在Motor类中需要三个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;
};

答案 1 :(得分:0)

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) 
  }
};