我有编译[医]二线菌的问题。我有以下代码
boost::shared_ptr <modbus_t> ctx;
ctx->modbus_new_tcp(ip_address.c_str(), modbus_port);但是我得到了以下错误
error: invalid use of incomplete type 'struct _modbus'它指向modbus.h中的这条线。
typedef struct _modbus modbus_t;我对此不太了解,无法解决我的问题。你觉得那是什么?这个库不可以与智能指针相比较吗?他们告诉你要使用普通指针
modbus_t* ctx;谢谢。
发布于 2015-09-09 20:28:53
事实上,这似乎是一个C风格的API,在这里,他们将modbus_t的实现完全隐藏在用户面前(因为您传递指向空闲函数的指针,而不是调用对象成员)。
这意味着您不能开箱即用shared_ptr (因为它需要定义来调用delete,这也恰好是要进行的错误调用)。可能有一种方法可以使用自定义删除器来调用适当的清理函数(可能是modbus_free)。然后,您必须在任何时候调用.get()来获取原始指针。
发布于 2015-09-09 21:51:39
你可以--也许--需要
if (std::unique_ptr<modbus_t, void(*)(modbus_t*)> mb(modbus_new_tcp(ip_address.c_str(), modbus_port), &modbus_free)) {
modbus_connect(mb);
/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb);
} // modbus_free invoked, even in the case of exception.当然,这是假定有独特的所有权。
https://stackoverflow.com/questions/32487853
复制相似问题