使用typedef结构增强shared_ptr

时间:2015-09-09 19:38:08

标签: c++ boost modbus-tcp

我遇到了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;

谢谢。

1 个答案:

答案 0 :(得分:1)

事实上,这似乎是一个C风格的API,他们完全隐藏了modbus_t作为用户的实现(因为你将指针传递给自由函数而不是调用对象成员)。 / p>

这意味着你不能开箱即用shared_ptr(因为它需要定义来调用delete,这恰好是错误的调用)。 可能是一种使用调用相应清理函数的自定义删除器的方法(可能是modbus_free)。然后,只要您想要调用API,就必须使用.get()来获取原始指针。