极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9738|回复: 4

在编写类函数时,如何使用另一个类的实例

[复制链接]
发表于 2013-5-17 17:08:52 | 显示全部楼层 |阅读模式
本帖最后由 MicroCao 于 2013-5-17 17:13 编辑

问题可以理解为两种类型的对象,先是步进电机(Stepper)这个类,再是一个使用了步进电机的机构(ProductionWheel)。这相当于是说ProductionWheel使用了一个Stepper的实例。
1、首先定义了Stepper的类,运行调试后没有问题:
[pre lang="arduino" line="1" file="Stepper"]class Stepper{
  private:
    int _pulse_Pin;
    int _direction_Pin;
    boolean _forward_dir_value;
    void one_pulse(int pulse_delay_millisec);
  public:
    boolean dir_seted;
    Stepper(int pulse_Pin, int direction_Pin, boolean forward_dir_value);
    void one_step(int pulse_delay_millisec);
    void directionset(boolean dir);
};

Stepper::Stepper(int pulse_Pin, int direction_Pin, boolean forward_dir_value){
  _pulse_Pin = pulse_Pin;
  _direction_Pin = direction_Pin;
  _forward_dir_value = forward_dir_value;
  dir_seted = true;
}

void Stepper:ne_pulse(int pulse_delay_millisec){
  digitalWrite(_pulse_Pin, HIGH);
  delayMicroseconds(pulse_delay_millisec);
  digitalWrite(_pulse_Pin, LOW);
  delayMicroseconds(pulse_delay_millisec);  
}

void Stepper::directionset(boolean dir){
  if(dir){
    digitalWrite(_direction_Pin, _forward_dir_value);
    dir_seted = true;
  }
  else{
    digitalWrite(_direction_Pin, !_forward_dir_value);
    dir_seted = false;
  }
}

void Stepper:ne_step(int pulse_delay_millisec){
  one_pulse(pulse_delay_millisec);
}[/code]


2、接着写ProductionWheel的类,却发现写到构造函数便写不下去了,调试时,IDE提示“no matching function for call to ‘Stepper::Stepper()’”:
[pre lang="arduino" line="1" file="roductionWheel"]class ProductionWheel
{
private:
  boolean _forward_dir_value;
  
public:
  Stepper wheelStepper;
  boolean dir_seted; //true表示正转,顺时针转
  ProductionWheel(int pulse_Pin, int direction_Pin, boolean forward_dir_value);
};

ProductionWheel:roductionWheel(int pulse_Pin, int direction_Pin, boolean forward_dir_value){
    wheelStepper = Stepper(pulse_Pin, direction_Pin, forward_dir_value);
    _forward_dir_value = forward_dir_value;
    dir_seted = true;
}[/code]


请高手帮忙看看问题出在哪里,真心搞不懂,这个实例的代码应该怎么写

Stepper wheelStepper;
wheelStepper = Stepper(pulse_Pin, direction_Pin, forward_dir_value);

回复

使用道具 举报

发表于 2013-5-17 18:46:27 | 显示全部楼层
我也不懂类,连官方给的6050的类都总是编译出错,也不知道哪里为啥出错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-18 10:25:06 | 显示全部楼层
问题已解决,使用初始化成员列表即可。
回复 支持 反对

使用道具 举报

发表于 2013-5-21 01:00:36 | 显示全部楼层
我来的时候你的问题已经解决了 {:soso_e113:}

最好能把你的解决办法也贴出来,这样其他童鞋遇到类似问题就知道怎么办
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-21 11:12:07 | 显示全部楼层
ardyPro 发表于 2013-5-21 01:00
我来的时候你的问题已经解决了

最好能把你的解决办法也贴出来,这样其他童鞋遇到类似问题 ...


将第二段代码改成初始化成员列表形式即可
  1. class ProductionWheel
  2. {
  3. private:
  4.   boolean _forward_dir_value;

  5. public:
  6.   Stepper wheelStepper;
  7.   boolean dir_seted; //true表示正转,顺时针转
  8.   ProductionWheel(int pulse_Pin, int direction_Pin, boolean forward_dir_value);
  9. };

  10. ProductionWheel::ProductionWheel(int pulse_Pin, int direction_Pin, boolean forward_dir_value):wheelStepper(pulse_Pin, direction_Pin, forward_dir_value){
  11.   _forward_dir_value = forward_dir_value;
  12.   dir_seted = true;
  13. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 08:25 , Processed in 0.038988 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表