我们正在使用宏包装器来绑定(bind)参数位置功能。

#define bindWhereClause(fieldName, fieldDataType, fieldData) _bindWhereClause(fieldName, fieldDataType, sizeof(fieldData), &fieldData)

void _bindWhereClause(const char *name, int dataType, int dataSize, void *data)
{
  // Implementation
}

Database.bindWhereClause( "FIRST_NAME", SQL_VARCHAR, name.getFirstName());

当我尝试使用函数作为参数调用宏时(如上所述),我收到错误消息“错误:一元'&'中的非左值”。

我可以使用普通变量调用宏
Database.bindWhereClause( "FIRST_NAME", SQL_VARCHAR, firstName);

如何解决呢?我需要使用内联函数而不是宏吗?

提前感谢您的帮助。

谢谢,
马修·丽朱(Mathew Liju)

最佳答案

您不能使用函数返回值的地址-它是短暂的。

您需要使用一个实变量:

Nametype first_name = name.getFirstName();
Database.bindWhereClause( "FIRST_NAME", SQL_VARCHAR, first_name);

// ... and maybe name.setFirstName(first_name); here

使用内联函数可以对其进行编译,但实际上不大可能。大概是这样的:
Database.execute();

...这希望您先前传递地址的对象仍然有效。如果使用内联函数而不是宏,则这些对象将不再存在,因为它们只是已存在的内联函数的本地对象。

08-16 00:59