Отправить строку в функцию внутри класса
Я создал небольшой класс для работы с меню. При создании нового экземпляра я передаю ссылку на объект oled
, созданный в main.cpp
. Тем не менее, когда я хочу отобразить строку с использованием переменной, она выдает ошибку. Но я могу без проблем передать строку непосредственно в функцию рендеринга. Смотрите комментарии в коде, что работает, а что нет.
#include "Arduino.h"
#include "U8glib.h"
#pragma once
class Menu {
U8GLIB_SSD1306_128X64& oled;
public:
Menu(U8GLIB_SSD1306_128X64& oled): oled(oled) {
this->oled = oled;
};
void render() {
this->oled.firstPage();
do {
String text = "test2";
this->oled.setFont(u8g_font_unifont);
this->oled.setPrintPos(0, 20);
this->oled.drawStr(text); // не работает
this->oled.drawStr(text.c_str()); // не работает
this->oled.drawStr("works"); // работает
} while (this->oled.nextPage());
}
};
В случае this->oled.drawStr(text);
ошибка:
error: no matching function for call to 'U8GLIB_SSD1306_128X64::drawStr(String&)
В случае this->oled.drawStr(text.c_str())
ошибка:
error: no matching function for call to 'U8GLIB_SSD1306_128X64::drawStr(const char*)
Как создать экземпляр в main.cpp
:
U8GLIB_SSD1306_128X64 oled(U8G_I2C_OPT_NONE);
Menu menu(oled);
menu.render();
@Martin Velinský, 👍2
Обсуждение2 ответа
Попробуйте новую версию U8g2lib.
В этой версии вы можете написать такой код:
String t1 = "Grow";
String t2 = "Room";
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_logisoso24_tf);
u8g2.drawStr(32, 24, t1.c_str());
u8g2.drawStr(32, 60, t2.c_str());
} while(u8g2.nextPage());
даже с библиотекой u8g2 я все равно получаю ту же ошибку компиляции, @Martin Velinský
Забудьте о классе String. Он тратит память в системе, которая уже ограничена памятью. Определите свои строки как const char *, и у вас не будет никаких проблем.
const char* t1 = "Grow";
const char* t2 = "Room";
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_logisoso24_tf);
u8g2.drawStr(32, 24, t1);
u8g2.drawStr(32, 60, t2);
} while(u8g2.nextPage());
Я не могу найти упоминания о функции
drawStr
в текущей библиотеке U8glib, которая принимает только один параметр. Какую версию вы используете и где вы ее взяли?, @MajenkoЯ перешел на u8g2 lib, передал 3 параметра (int int c_str) и все еще получаю ту же ошибку, @Martin Velinský
@MartinVelinský, если вы обновили его, то отредактируйте вопрос и ДОБАВЬТЕ новый код, иначе невозможно правильно ответить, @frarugi87