Я довольно опытный разработчик .net, но новичок в Arduino и C/C++, и я пытаюсь создать свою первую библиотеку, которая является простым драйвером для 7-сегментного светодиодного дисплея. У меня много тупых ошибок компилятора, но в духе одной вещи за раз это первое. Я хочу добавить конструктор без параметров в мой класс, и когда я выполняю компиляцию библиотеки, но когда я пытаюсь использовать класс в эскизе, компилятор дает мне довольно тупой «запрос для члена setDigit» в «sevenSegmentLed», который имеет внеклассовой типа «SevenSegmentLed()»Parameterless constructor
Самый простой пример кода ниже:
#ifndef SevenSegmentLed_h
#define SevenSegmentLed_h
#include "Arduino.h"
class SevenSegmentLed
{
public:
void setDigit(int digit);
SevenSegmentLed();
};
#endif
#include "Arduino.h"
#include "SevenSegmentLed.h"
SevenSegmentLed::SevenSegmentLed()
{
}
void SevenSegmentLed::setDigit(int digit)
{
}
#include "SevenSegmentLed.h"
SevenSegmentLed sevenSegmentLed();
void setup() {
sevenSegmentLed.setDigit(4);
}
void loop() {
// put your main code here, to run repeatedly:
}
Однако если изменить конструктор подпись: SevenSegmentLed(int wtf);
и создать его экземпляр таким образом: SevenSegmentLed sevenSegmentLed(1);
компилирует просто отлично. Так как параметр говорит, WTF?
Похож на случай наиболее неприятного разбора, что-то, что я могу добавить, не возникает в C#. 'SevenSegmentLed sevenSegmentLed();' это интерпретируется компилятором как объявление функции. – shuttle87
Спасибо, я подумал, что это что-то в этом роде, и что мне с этим делать? –
Btw, даже если у вас есть синтаксис справа, глобальные переменные * очень редко * (я почти хочу сказать никогда) хорошая идея в C++. –