Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 类将在循环()中初始化,但在设置()中不初始化_Loops_Class_Arduino_Installation_Instance - Fatal编程技术网

Loops 类将在循环()中初始化,但在设置()中不初始化

Loops 类将在循环()中初始化,但在设置()中不初始化,loops,class,arduino,installation,instance,Loops,Class,Arduino,Installation,Instance,我在Arduino创建了一个类,并引入了该类。在以下情况下,代码可以正常编译和运行: #include <myclass.h> void setup(){ // Do some setup if needed } void loop(){ myclass newInstance; newInstance.setSomething(); newInstance.getSomething(); } #包括 无效设置(){ //如果需要,进行一些设置 } void循环(){ mycl

我在Arduino创建了一个类,并引入了该类。在以下情况下,代码可以正常编译和运行:

#include <myclass.h>

void setup(){
// Do some setup if needed
}

void loop(){
myclass newInstance;
newInstance.setSomething();
newInstance.getSomething();
}
#包括
无效设置(){
//如果需要,进行一些设置
}
void循环(){
myclass新实例;
newInstance.setSomething();
getSomething();
}
但在以下情况下不验证/编译:

#include <myclass.h>

void setup(){
myclass newInstance;
newInstance.setSomething();
}

void loop(){
newInstance.getSomething();
}
#包括
无效设置(){
myclass新实例;
newInstance.setSomething();
}
void循环(){
getSomething();
}
错误:“newInstance”未在此范围内声明


我见过一些人在设置和循环之外实例化(在include部分的正下方)。请解释创建实例然后在循环中使用它的最佳实践。我想在循环部分之外实例化,所以我不会在每个循环中创建实例。

您应该在全局范围内声明对象。C++中的变量声明(和Arduinos语言基本上是C++)在

中是有效的。 所以你的代码应该是

#include <myclass.h>

myclass newInstance;

void setup(){

newInstance.setSomething();
}

void loop(){
newInstance.getSomething();
}
#包括
myclass新实例;
无效设置(){
newInstance.setSomething();
}
void循环(){
getSomething();
}

您应该在全局范围内声明对象。C++中的变量声明(和Arduinos语言基本上是C++)在

中是有效的。 所以你的代码应该是

#include <myclass.h>

myclass newInstance;

void setup(){

newInstance.setSomething();
}

void loop(){
newInstance.getSomething();
}
#包括
myclass新实例;
无效设置(){
newInstance.setSomething();
}
void循环(){
getSomething();
}

谢谢。我试过了,但是把“.setsomething”包含在了全球范围内。当我像您一样在全局中创建一个实例时,它就起作用了。这是正确答案。全局范围中的代码没有运行,只是定义了变量。您应该在函数中放置可执行代码。在Arduino中,所有启动都在预定义的函数
设置
循环
中启动,在其他环境中通常在函数
main
中启动,谢谢。我试过了,但是把“.setsomething”包含在了全球范围内。当我像您一样在全局中创建一个实例时,它就起作用了。这是正确答案。全局范围中的代码没有运行,只是定义了变量。您应该在函数中放置可执行代码。在Arduino中,所有的启动都是在预定义的函数
设置
循环
,在其他环境中通常是在函数
main
中,这是我不喜欢Arduino框架强制使用两个单独的“main”函数的原因之一,我看不到任何好处。。。它们是两个不同的作用域,无论你在其中声明什么,对另一个都不可见。这就是我不喜欢Arduino框架强制使用两个单独的“主”函数的原因之一,我看不到任何好处。。。它们是两个不同的作用域,无论您在其中声明什么,都不会对另一个可见。