假设我想从我写的类
中获取草图中变量的值草图
int device;
void setUp() {
device = 1;
}
我上课了 SomeClass.cpp
void Device::checkTimedEvent() {
someDevice = device; //variable from sketch
}
我知道可以从另一个类中访问成员,我可以在其中包含类并使用:: scope运算符,但不确定草图与类的关系。 感谢
答案 0 :(得分:4)
看起来通常的C / C ++“extern”语法在Arduino中起作用,就像草图文件是.cpp文件一样:
草图:
int device = 123;
SomeClass.cpp:
extern int device;
void SomeClass::checkTimedEvent() {
someDevice = device; // variable from sketch
// will display "123" (or current value of device)
// if serial output has been set up:
Serial.println("device: " + String(device));
}
您可能需要担心启动和初始化顺序,具体取决于项目的复杂程度。
答案 1 :(得分:-1)
class Test
{
public:
int N = 0;
};
Test t;
int someNumber = t.N;
答案 2 :(得分:-2)
执行此操作的最佳方法是将值作为参数传递给函数。这是一个简单的例子:
类别:
class Test
{
public:
void doSomething(int v);
private:
int myValue;
};
void Test::doSomething(int v)
{
myValue = v;
}
草图:
Test t;
int someNumber;
void setup()
{
someNumber = 27;
t.doSomething(someNumber);
}
这里的setup()
函数将全局变量someNumber
传递给类的成员函数。在成员函数内部,它存储自己的数字副本。
重要的是要注意它具有完全独立的副本。如果全局变量发生变化,则需要再次传入。
答案 3 :(得分:-2)
尽管Bloomfiled的回答是正确的,但使用了更为公认的使用Getter和Setter函数的做法。下面演示了这一点,同时将属性设置为public并直接访问它。
class Test
{
public:
void SetMyValue(int v);
int GetPublicValue();
int GetPrivateValue();
int myPublicValue;
private:
int myPrivateValue;
};
void Test::SetMyValue(int v)
{
myPublicValue = v;
myPrivateValue = v;
}
int Test::GetPublicValue()
{
return myPublicValue;
}
int Test::GetPrivateValue()
{
return myPrivateValue;
}
Test t;
int someNumber;
void setup()
{
someNumber = 27;
t.SetMyValue(someNumber); // set both private and public via Setter Function
t.myPublicValue = someNumber; // set public attribute directly.
someNumber = t.GetPublicValue(); // read via Getter
someNumber = t.GetPrivateValue();
someNumber = t.myPublicValue; // read attribute directly
}
void loop() {
// put your main code here, to run repeatedly:
}