不能在静态类函数中增加静态变量
Cannot increment static variable within static class function
class Stepper
{
private:
int enable;
int direction;
int speed;
static int turretCounter;
public:
Stepper(int en, int dir)
{
enable = en;
direction = dir;
pinMode(enable,OUTPUT);
pinMode(direction,OUTPUT);
pinMode(4,OUTPUT);
}
void Stop()
{
digitalWrite(enable,1);
Timer1.detachInterrupt();
Timer1.stop();
}
static void IncrementCounter()
{
turretCounter++;
}
//your step pin must be 4 due to limitations on static vars and methods
static void Step()
{
digitalWrite(4,0);
delayMicroseconds(1);
digitalWrite(4,1);
IncrementCounter();
}
void SetSpeed(int Speed)
{
speed = Speed;
}
void Run(int seconds)
{
digitalWrite(enable,0);
Timer1.attachInterrupt(Step);
Timer1.initialize(speed);
}
int GetCounter()
{
return turretCounter;
}
void SetDirection(int dir)
{
digitalWrite(direction,dir);
}
int GetSpeed()
{
return speed;
}
};
我想让你注意静态的Step()方法和静态的IncrementCounter()方法。我试过在Step()函数中增加变量,但我总是得到"错误编译板Arudino Nano"。我试过在Step()方法中直接调用IncrementCounter(),我得到了"没有对象就不能调用类方法"的错误。我从Step()方法中得到这个错误。
尝试在某个地方(最好是在.cpp
/.cxx
/.C
文件中)定义turretCounter
:
int Stepper::turretCounter = 0;
如果这解决了你的问题,那么你可能忽略了一个更有信息量的错误消息,只发布了编译器输出的最后一行。今后要更加注意编译错误,并养成按照它们在输出中出现的顺序来研究它们的习惯(因为后面的错误可能只是前面错误的结果)。
相关文章:
- 数组索引的值没有增加
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 为什么我的代码在输出中增加了93天
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- 当我在C++中增加私有静态变量时,程序会抛出错误
- 为什么将鼠标悬停在静态 Win32 控件上会增加内存并删除我的 GUI?
- 静态变量不增加
- C++在多个文件单元中链接相同的静态库会增加大小/膨胀
- C++静态计数器未正确增加
- 为什么生成pdb文件会导致静态链接库的大小大幅增加
- 创建动态数组时,会增加静态成员(计数器)
- 静态成员函数会给类增加一个开销
- 不能在静态类函数中增加静态变量