无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"

Cannot access Arduino struct fields. ERROR "exit status 1. xxxx does not name a type"

本文关键字:xxxx 类型 状态 退出 结构 Arduino 字段 错误 访问      更新时间:2023-10-16

使用structs时,我无法编译Arduino IDE。我定义了一个名为params的简单结构来保存我的参数。

当我尝试使用"."访问结构体params的字段时,它会抛出以下错误

exit status 1
'params' does not name a type

我已经搜索并尝试了许多不同的东西。我试着把定义放在一个单独的.h文件中,并试着把我的草图放在.cpp文件中,而不是用.ino,但我无法使这个结构工作!

我确信语法是正确的,它将在C++中工作。当Arduino IDE给我这个错误时,我不明白!

这是我的.ino文件顶部的代码。如果你能帮助我,我将不胜感激,谢谢!

#include <MIDI.h>
#include <Wire.h>
#include <EEPROM.h>
// address for Terabee laser sensor connnected via USB
#define ADDRESS 0x55
const int num_sensors = 3;
typedef struct {    // holds all free parameters (for presets)
int test;
int reverse[num_sensors];
int active[num_sensors];
int sensor_range[num_sensors];
int cc_num[num_sensors];
int channel[num_sensors];
int default_value[num_sensors];  // for rubber-band mode
int min_value[num_sensors];
int max_value[num_sensors];
} parameters;

// Created and binds the MIDI interface to the default hardware Serial port
MIDI_CREATE_DEFAULT_INSTANCE();

parameters params;
params.test= 2;   // COMPILER THROWS ERROR ON THIS LINE!!!!!!!!!
//params.cc_num = {22, 23, 24};
//params.reverse = {false, false, false};
//params.sensor_range = {150, 150, 150}; //upper limit (how far shall the hand go?)
//params.default_value = {64, 64, 64};  // rubber-band defaults for the 3 sensors
//params.min_value = {0, 0, 0};
//params.max_value = {127, 127, 127};
void setup() {   [....]

我使用全局变量,我不知道这是否是个好主意,但我是Arduino的新手,目前它运行良好,只添加结构会产生所有问题。

此外,只需使用parameters params;定义结构即可编译。尝试访问字段时出现错误,如params.test = 2;

移动函数中的代码并调用它:

void test() {
params.test= 2;  
params.cc_num = {22, 23, 24};
params.reverse = {false, false, false};
params.sensor_range = {150, 150, 150}; 
params.default_value = {64, 64, 64};  
params.min_value = {0, 0, 0};
params.max_value = {127, 127, 127};
}

在c和c++pre-c++11中,不能将非静态成员初始化为全局变量。

我不熟悉Arduino,但熟悉以下代码:

params.test= 2;

以及为结构成员赋值的所有其他(当前已注释掉(行,应该在函数内。也许是您在下面定义的Setup((函数?

我认为以前您可以编译以下语句:

int test = 2;

因为在这种情况下,"="运算符是初始化变量的值,而不是将值分配给结构成员