-1

在此示例中,如何将字符串传递给绑定的“处理程序”函数?

// 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
4

2 回答 2

2

当你这样做

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
于 2017-03-02T16:42:56.810 回答
0

lvalue required as unary '&' 操作数是说需要一个变量来获取地址。对于您的方法:

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

路径未定义 - 因此在这种情况下路径不是可寻址变量。正如@Remy Lebeau 在上面的评论中提到的,如果您传入参数uri - 那么您就有一个有效的可寻址变量。

于 2017-03-02T08:17:58.567 回答