Вывод структуры автоматом

KaZaK-007
Offline
Зарегистрирован: 21.01.2020

Добрый день!

Подскажите, есть ли возможность сделать автоматический вывод содержимого структуры в монитор, по типу как функция объекта toString()??

то есть сделать преобразоване например в массив char?

b707
Offline
Зарегистрирован: 26.05.2017

можно конечно,  если напишите функцию вывода для структуры

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

struct XXX {

.

.

.

void ToString(Print &OutStream){

  OutStream<<...<<...<<...;

}

}

и сё.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вот здесь подробно, с примерами написано как это делается.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

описать в структуре нужные операторы, например, operator String()

KaZaK-007
Offline
Зарегистрирован: 21.01.2020

Это абсолютно то, что я хотел узнать! Огромное спасибо!!!

но пока я рыл просторы интернета, нашел такую вещь как перегрузка операторов преобразования.

в ардуино это можно применять?

struct {
  int a;
  char ch;

  operator *char () {
    return ((*char) a+b)
  }
}

типа этого, что бы приведении структуры к типу массив символов это происходило по умолчанию.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

В ардуино используется язык С++. Дальше объяснять?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
struct str_t {
  int _a;
  char _ch;
  str_t(): _a(0), _ch('z') {}
  str_t(int a, char ch): _a(a), _ch(ch) {}
  /*писать большую пятерку мне влом*/
  operator String() {
    String r = String(_ch) + String("=") + String(_a);
    return r;
  }
};
//-----------------------------
void setup() {
  str_t bb, aa = {12, 'A'};
  Serial.begin(9600);
  Serial.println(aa);
  Serial.println(bb);
}

void loop() {
}

 

KaZaK-007
Offline
Зарегистрирован: 21.01.2020

Вот такой код, почему не работает?

struct MyStruct {
    char a;
    byte b;

    operator char*() {
      char *res[] = {a, b};
      return res;
    }
  };

MyStruct s = {'k', 15};

void setup() {
  Serial.println(s);
}

void loop() {}

выдает ошибку: cannot convert 'char**' to 'char*' in return

Может я хочу слишком много?!)
Хотел избежать в скетче использование объектов String (вроде как пишут что дополнительно в памяти забирает 1кб)
 

DIYMan пишет:

В ардуино используется язык С++. Дальше объяснять?

Я бы с удовольствием бы послушал... (изучал яву и немного лу, в с++ только пытаюсь разобраться) но думаю не дождусь этого
но уточню в скетче подерживается полный синтаксис с11, с13, с17, все правильно я понял?

 

Logik
Offline
Зарегистрирован: 05.08.2014

пошти правильно, Схх от версии ИДЕ зависит. Послушать не получится, это долго будет. 

b707
Offline
Зарегистрирован: 26.05.2017

KaZaK-007 пишет:

выдает ошибку: cannot convert 'char**' to 'char*' in return

может вы рано в перегрузку операторов полезли, вы пока даже ссылки и указатели не понимаете...

По ошибке - звездочку в строчке 6 уберите

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

KaZaK-007 пишет:
Может я хочу слишком много?!)
Таки, да! Вы хотите делать концептуально сложные вещи не имея даже базовых знаний в языке.

Про ошибку Вам в #10 правильно сказали, только результат выполнения Вас всё равно не обрадует :-(