使用 struct 时 arduino ide 中的链接器错误

问题描述 投票:0回答:1
struct button {
  static int pin;
  bool pressed;
};

button Kreis1Button[] = {15, false};

void setup() {
  pinMode(Kreis1Button[0].pin, INPUT_PULLUP);

}

void loop() {
  // put your main code here, to run repeatedly:

}

你好,

我想在我的arduino sketch中使用一个结构来管理我的按钮数据和状态。但是当我想使用结构中的变量时,我收到链接器错误。

/home/USER/.arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/esp-2021r2-patch5-8.4.0/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: /home/USER/.var/app/cc.arduino.IDE2/cache/arduino/sketches/****/sketch/sketch_may1a.ino.cpp.o:(.literal._Z5setupv+0x0): undefined reference to `button::pin'
collect2: error: ld returned 1 exit status

exit status 1

Compilation error: exit status 1

我已经研究了其他一些问题,但找不到足够的答案。但我读到这可能是 Arduino ide 内部的错误。

arduino arduino-ide arduino-c++
1个回答
0
投票

在使用该类之前必须初始化静态成员:

struct button {
  static int pin;
  bool pressed;
};
int button::pin = 15;

button Kreis1Button[] = {false};

void setup() {
  pinMode(Kreis1Button[0].pin, INPUT_PULLUP);

}

void loop() {
  // put your main code here, to run repeatedly:

}

如果您希望每个按钮都有自己的引脚号,那么引脚不能是静态的。在类中,

static
表示只有一个该变量被该类的所有实例共享。因此,只有当所有按钮都具有相同的引脚时,这才有意义。

© www.soinside.com 2019 - 2024. All rights reserved.