【问题标题】:Define object in public but create it in Constructor公开定义对象,但在构造函数中创建它
【发布时间】:2014-05-14 12:19:24
【问题描述】:

我想做的与此类似(工作):

class Claw {
  public:
    Claw(int pin);
  private:
    int pin;
  };

Claw::Claw(int pinNumber) {
  pin = pinNumber;
  }

但我想用类而不是基本类型来做。我想在私有部分定义类(这样我就可以在所有对象上使用它)并在Wheel 构造函数中执行AccelStepper 构造函数。我已经尝试了这两种解决方案,它们都给出了不同的错误:

class Wheel {
  public:
    Wheel(int pin);
  private:
    AccelStepper stepper;
  };

Wheel::Wheel(int pinNumber) {

  // This doesn't work
  AccelStepper stepper(AccelStepper::DRIVER, pinNumber, 1);

  // This also doesn't work
  stepper(AccelStepper::DRIVER, pinNumber, 1);
  }

我怎样才能实现我想要做的事情?

请注意,这可行,但我无法传递密码:

class Wheel {
  public:
    Wheel();
  private:
    AccelStepper stepper(5);
  };

Wheel::Wheel() {
  }

【问题讨论】:

    标签: c++ class object constructor arduino


    【解决方案1】:

    您可以使用member initialization list

    Wheel::Wheel(int pinNumber)
        : stepper(AccelStepper::DRIVER, pinNumber, 1)
    {
    }
    

    【讨论】:

    • 简单而完美。我什至不知道这可以做到,谢谢。
    【解决方案2】:

    在您的标题中:

    class Wheel
    {
    public:
        class Stepper; // Forward declaration of embedded class
    
        Wheel();
        Stepper& stepper() { return *_pStepper; }
    
    private:
    
        Stepper* _pStepper;
    };
    

    在您的实施中:

    class Wheel::Stepper
    {
    public:
        void accelerate() {}
    };
    
    Wheel::Wheel()
        : _pStepper( new Stepper() )
    {
        stepper().accelerate();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2011-05-22
      • 2016-09-23
      • 1970-01-01
      • 2012-02-05
      • 1970-01-01
      相关资源
      最近更新 更多