MicroCao 发表于 2013-5-17 17:08:52

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

本帖最后由 MicroCao 于 2013-5-17 17:13 编辑

问题可以理解为两种类型的对象,先是步进电机(Stepper)这个类,再是一个使用了步进电机的机构(ProductionWheel)。这相当于是说ProductionWheel使用了一个Stepper的实例。
1、首先定义了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::one_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::one_step(int pulse_delay_millisec){
one_pulse(pulse_delay_millisec);
}


2、接着写ProductionWheel的类,却发现写到构造函数便写不下去了,调试时,IDE提示“no matching function for call to ‘Stepper::Stepper()’”:
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::ProductionWheel(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;
}


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

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

学慧放弃 发表于 2013-5-17 18:46:27

我也不懂类,连官方给的6050的类都总是编译出错,也不知道哪里为啥出错了

MicroCao 发表于 2013-5-18 10:25:06

问题已解决,使用初始化成员列表即可。

ardyPro 发表于 2013-5-21 01:00:36

我来的时候你的问题已经解决了 {:soso_e113:}

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

MicroCao 发表于 2013-5-21 11:12:07

ardyPro 发表于 2013-5-21 01:00 static/image/common/back.gif
我来的时候你的问题已经解决了

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

将第二段代码改成初始化成员列表形式即可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::ProductionWheel(int pulse_Pin, int direction_Pin, boolean forward_dir_value):wheelStepper(pulse_Pin, direction_Pin, forward_dir_value){
_forward_dir_value = forward_dir_value;
dir_seted = true;
}
页: [1]
查看完整版本: 在编写类函数时,如何使用另一个类的实例