在编写类函数时,如何使用另一个类的实例
本帖最后由 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);
我也不懂类,连官方给的6050的类都总是编译出错,也不知道哪里为啥出错了 问题已解决,使用初始化成员列表即可。 我来的时候你的问题已经解决了 {:soso_e113:}
最好能把你的解决办法也贴出来,这样其他童鞋遇到类似问题就知道怎么办 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]