我遇到了libmodbus的编译问题。我有以下代码
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;
谢谢。
答案 0 :(得分:1)
事实上,这似乎是一个C风格的API,他们完全隐藏了modbus_t
作为用户的实现(因为你将指针传递给自由函数而不是调用对象成员)。 / p>
这意味着你不能开箱即用shared_ptr
(因为它需要定义来调用delete
,这恰好是错误的调用)。 可能是一种使用调用相应清理函数的自定义删除器的方法(可能是modbus_free
)。然后,只要您想要调用API,就必须使用.get()
来获取原始指针。