我正在尝试从名为EchoClient的QtSocketIO编译示例。
但是当我尝试使用MSVC2013进行编译时,我在echoclient.cpp
1> echoclient.cpp
1> echoclient.cpp(7):错误C2010:'。' :宏形态参数列表中的意外
代码看起来像这样我将每行中的错误作为注释
#include "echoclient.h"
#include "qsocketioclient.h"
#include <QtCore/QJsonObject>
#include <QtCore/QJsonArray>
#include <QtCore/QDebug>
#define function(args...) [=](args) // Error expected a ')'
void EchoClient::connected(QString endpoint)
{
qDebug() << "Connected to endpoint" << endpoint;
m_client.emitMessage("event with 2 arguments",
QVariantList() << 1 << QStringLiteral("Hello socket.io"),
function(QJsonArray returnValue) { // Error expected an expression
qDebug() << "Got reply from event with 2 arguments:" << returnValue;
});
m_client.emitMessage("event with a json object",
QVariantMap({ {"number", 1}, { QStringLiteral("message"),
QStringLiteral("Hello socket.io")}}),
function(QJsonArray returnValue) { // Error expected an expression
qDebug() << "Got reply from event with a json object:" << returnValue;
});
m_client.on("event from server", function(QJsonArray data) { // Error expected an expression
qDebug() << "Got event from server with data" << data;
});
}
有人可以向我解释一下这个宏在做什么吗?有没有办法解决错误?
答案 0 :(得分:1)
宏使lambda看起来像普通的函数声明。它不起作用的原因是因为,如评论中所述,#define function(args...) [=](args)
并不正确。将其更改为#define function(...) [=](__VA_ARGS__)
即可。