у меня 5 кнопок. Я создаю структуру, чтобы описать их. Они используют JLed
и CapacitiveSensor
.
Итак, вот мой план:
struct Button
{
long capThreshold = 200;
long maxLedBrightness;
Button(uint8_t capPin, byte ledPin, byte maxLedBrightness_)
{
auto led = JLed(ledPin);
auto capSensor = CapacitiveSensor(2, capPin);
capSensor.set_CS_Timeout_Millis(50);
maxLedBrightness = maxLedBrightness_;
}
};
Button buttons[5] = {
Button(A0, 3, 45),
Button(A1, 5, 255),
Button(A2, 6, 30),
Button(A3, 9, 100),
Button(A4, 10, 100)};
Это не работает. Я пытаюсь использовать это:
for (byte i = 0; i < 4; i++)
{
buttons[i].led.Update();
}
Затем мне говорят, что class "Button" has no member "led"
. Итак, я считаю, что здесь происходит то, что элемент инициализируется в конструкторе, что означает, что он не доступен извне. Итак, я в значительной степени нахожусь с проблемой, описанной здесь . Решение состоит в том, чтобы инициализировать указатель на член, а затем заполнить содержимое указателя в конструкторе.
Я действительно не хочу этого делать. Я не хочу иметь дело с запоминанием того, что является и не является указателем. Я не хочу иногда использовать ->
вместо .
. Кроме того, звучит так, будто мне придется иметь дело с разрушением. Я не хочу, чтобы эта относительно незначительная проблема вызывала головные боли во всей программе.
Можно ли как-нибудь избежать этого?
Редактировать: Позвольте мне перефразировать мою проблему. Я думаю, что есть недоразумение. Я понимаю, что переменные, инициализированные в конструкторе, не являются членами. Я понимаю, что с нормальной переменной я мог бы объявить член, а затем изменить его в конструкторе. Проблема в том, что я не могу объявить эти переменные вне конструктора, потому что информацию, которую мне нужно передать в их конструкторах, мне нужно получить из моего конструктора.