我们正在使用宏包装器来绑定(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();
...这希望您先前传递地址的对象仍然有效。如果使用内联函数而不是宏,则这些对象将不再存在,因为它们只是已存在的内联函数的本地对象。