首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法访问Arduino struct字段。错误“退出状态1. xxxx不命名类型”

无法访问Arduino struct字段。错误“退出状态1. xxxx不命名类型”
EN

Stack Overflow用户
提问于 2018-07-27 14:03:33
回答 2查看 573关注 0票数 1

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

当我尝试使用“params”访问struct的字段时。它会抛出这个错误

代码语言:javascript
复制
exit status 1
'params' does not name a type

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

我非常肯定语法是正确的,而且它在C++中也能工作。我不明白Arduino IDE给了我这个错误!

下面是我的.ino文件顶部的代码。如果你能帮助我,那将是非常感谢的,谢谢!

代码语言:javascript
复制
#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;

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-27 14:46:56

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

代码语言:javascript
复制
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中,您不能将非静态成员初始化为全局vars。

票数 1
EN

Stack Overflow用户

发布于 2018-07-27 14:49:02

我不熟悉Arduino,但是下面的代码:

代码语言:javascript
复制
params.test= 2;

..。所有其他为结构成员赋值的行(目前已注释掉)都应该在函数中。可能是您在下面定义的Setup()函数?

我认为,在此之前,您可以编写如下语句:

代码语言:javascript
复制
int test = 2;

..。因为在这种情况下,'=‘操作符是在初始化变量的值,而不是将值分配给结构成员

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51559653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档