簡體   English   中英

無法訪問Arduino結構字段。 錯誤“退出狀態1. xxxx未命名類型”

[英]Cannot access Arduino struct fields. ERROR “exit status 1. xxxx does not name a type”

使用結構時,我無法使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;定義結構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;

...,因為在這種情況下,“ =”運算符正在初始化變量的值,而不是分配給結構成員

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM