Arduino oop错误 我学习如何用C++来编程,并且运行到一个我无法理解的错误。
这是我的密码Arduino oop错误 我学习如何用C++来编程,并且运行到一个我无法理解的错误。,c++,oop,arduino,C++,Oop,Arduino,这是我的密码 class ledControler { public: void ledOn(); void ledOff(); void ledStrobe(); void ledFade(); ledControler(int); private: int pinNumber = 0; }; ledControler::ledControler(int pin) { pinNumber = pin; pinMode(pin
class ledControler
{
public:
void ledOn();
void ledOff();
void ledStrobe();
void ledFade();
ledControler(int);
private:
int pinNumber = 0;
};
ledControler::ledControler(int pin)
{
pinNumber = pin;
pinMode(pinNumber, OUTPUT);
ledOn();{
digitalWrite(pinNumber, HIGH);
}
ledOff ();{
digitalWrite(pinNumber, LOW);
}
ledStrobe(int time);{
digitalWrite(pinNumber, HIGH);
delay(time);
digitalWrite(pinNumber, LOW);
delay(time);
}
}
以下是错误:
Object_oriented_LED.ino: In constructor 'ledControler::ledControler(int)':
Object_oriented_LED.ino:24:13: error: expected primary-expression before 'int'
Object_oriented_LED.ino:26:11: error: 'time' was not declared in this scope
Error compiling.
您有一些方法显然是在构造函数中创建的,这是不正确的。每种方法都应该有自己的方法,例如:
void ledControler::ledOn() {
digitalWrite(pinNumber, HIGH);
}
考虑构造函数中的代码片段:
ledOn();{
digitalWrite(pinNumber, HIGH);
}
这实际上被视为对函数ledOn
的调用,后面是一个包含digitalWrite
调用的块,这两个调用都是完全有效的(除了没有定义ledOn
函数之外,当然,如果您能够克服编译错误,您在链接时肯定会发现这一点)
阻止此操作的特定编译错误是您尝试的定义:
ledStrobe(int time);{ ...
如上所述,这实际上更多的是对ledStrobe
的调用,不幸的是,这不是一个有效的调用,因为您不应该在调用中提供数据类型(通常是ledStrobe(time);
)
这就是第一个错误的来源。第二个原因是,由于您没有实际定义接收time
参数的函数,因此使用它的代码抱怨它不存在
正确定义方法应该可以解决这两个问题,这可以通过以下方法实现:
class ledControler {
public:
void ledOn();
void ledOff();
void ledStrobe();
void ledFade();
ledControler(int);
private:
int pinNumber = 0;
};
ledControler::ledControler(int pin) {
pinNumber = pin;
pinMode(pinNumber, OUTPUT);
}
void ledControler::ledOn() {
digitalWrite(pinNumber, HIGH);
}
void ledControler::ledOff () {
digitalWrite(pinNumber, LOW);
}
void ledControler::ledStrobe(int time) {
digitalWrite(pinNumber, HIGH);
delay(time);
digitalWrite(pinNumber, LOW);
delay(time);
}
您的方法显然是在构造函数中创建的,这是不正确的。每个方法都应该是自己的方法,例如:
void ledControler::ledOn() {
digitalWrite(pinNumber, HIGH);
}
考虑构造函数中的代码片段:
ledOn();{
digitalWrite(pinNumber, HIGH);
}
这实际上被视为对函数ledOn
的调用,后面是一个包含digitalWrite
调用的块,这两个调用都是完全有效的(除了没有定义ledOn
函数之外,当然,如果您能够克服编译错误,您在链接时肯定会发现这一点)
阻止此操作的特定编译错误是您尝试的定义:
ledStrobe(int time);{ ...
如上所述,这实际上更多的是对ledStrobe
的调用,不幸的是,这不是一个有效的调用,因为您不应该在调用中提供数据类型(通常是ledStrobe(time);
)
这就是第一个错误的来源。第二个原因是,由于您没有实际定义接收time
参数的函数,因此使用它的代码抱怨它不存在
正确定义方法应该可以解决这两个问题,这可以通过以下方法实现:
class ledControler {
public:
void ledOn();
void ledOff();
void ledStrobe();
void ledFade();
ledControler(int);
private:
int pinNumber = 0;
};
ledControler::ledControler(int pin) {
pinNumber = pin;
pinMode(pinNumber, OUTPUT);
}
void ledControler::ledOn() {
digitalWrite(pinNumber, HIGH);
}
void ledControler::ledOff () {
digitalWrite(pinNumber, LOW);
}
void ledControler::ledStrobe(int time) {
digitalWrite(pinNumber, HIGH);
delay(time);
digitalWrite(pinNumber, LOW);
delay(time);
}
ledOn();{digitalWrite(pinNumber,HIGH);}
删除第一个;
分号,并将其移到构造函数外部。其他的也一样。那么您在哪里声明time
?ledOn();{digitalWrite(pinNumber,HIGH);}
删除第一个;
分号,并将其移到构造函数外。其他的也一样。那么您在哪里声明时间呢?
?谢谢paxdiablo!这是一大堆帮助。谢谢paxdiablo!这是一大堆帮助。