【问题标题】:Cannot access Arduino struct fields. ERROR "exit status 1. xxxx does not name a type"无法访问 Arduino 结构字段。错误“退出状态1。xxxx没有命名类型”
【发布时间】:2026-01-11 13:10:01
【问题描述】:

使用结构时,我无法编译 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;

【问题讨论】:

标签: c++ struct compiler-errors arduino typedef


【解决方案1】:

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

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++ 前 c++11 中,您不能将非静态成员初始化为全局变量。

【讨论】:

    【解决方案2】:

    我对Arduino不熟悉,但代码如下:

    params.test= 2;
    

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

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

    int test = 2;
    

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

    【讨论】: