Попытка передать строку в связанную функцию Переполнение стека

В этом примере, как вы передаете строку в связанную функцию-обработчик?

// MyClass.h

class MyClass {
public:
MyClass(ESP8266WebServer& server) : m_server(server);
void begin();
void handler(String path);
protected:
ESP8266WebServer& m_server;
};

// MyClass.cpp
...
void MyClass::begin() {

String edit = "/edit.htm";

m_server.on("/edit", HTTP_GET, std::bind(&MyClass::handleFileRead(edit), this));
...

Каждый способ, которым я пытаюсь, я получаю:

error: lvalue required as unary '&' operand

-1

Решение

Когда вы делаете

std::bind(&MyClass::handleFileRead(edit), this)

вы пытаетесь вызов MyClass::handleFileRead(edit)и возьмите указатель результата в качестве аргумента std::bind вызов. Это, конечно, неверно, тем более что функция ничего не возвращает, а не static функция-член ..

Вы не должны вызов функция, просто передайте на нее указатель (и установите аргумент):

std::bind(&MyClass::handleFileRead, this, edit)
//                                ^       ^
// Note not calling the function here     |
//                                        |
//       Note passing edit as argument here
2

Другие решения

lvalue требуется как одинарный&операнд говорит, что переменная требуется для получения адреса. В случае вашего метода:

void begin(const char* uri)
{
m_server.on(uri, HTTP_GET, std::bind(&MyClass::handler(&path), this));
}

путь не определен — поэтому в этом случае путь не является адресуемой переменной. Как уже упоминалось в комментарии выше, @Remy Lebeau, если вы передадите параметр uri — тогда у вас будет допустимая адресуемая переменная.

0