我寫的通用應用程序處理JSON配置文件中定義的儘可能多的modbus設備。 mbus_servers結構用於my_modbus_init()內容的設備和端口的ip。如何malloc modbus_t
在my_modbus_init()一個modbus_t的初始化看起來是這樣的:
modbus_t * my_modbus_init(const char * ip_s, int port, int slave_id)
{
modbus_t *ctx;
ctx = modbus_new_tcp(ip_s, port);
if(ctx == NULL)
{
printf("Error");
}
modbus_set_debug(ctx, 0);
if (modbus_connect(ctx) == -1)
{
fprintf(stderr, "Connection failed: %s\n",modbus_strerror(errno));
modbus_free(ctx);
return NULL;
}
modbus_set_slave(ctx, slave_id);
return ctx;
}
現在我嘗試初始化dynamiclly分配數量modbus_t的:
modbus_t * my_modbus;
int quantity_of_connections_modbus = 3;
my_modbus = (modbus_t *) malloc (quantity_of_connections_modbus * sizeof(modbus_t));
^here I get invalid application of ‘sizeof’ to incomplete type ‘modbus_t' (I know that is because i dont have acces to definition of modbus_t [it is defined in modbus.h as typedef struct _modbus modbus_t; ])
for(i=0; i< quantity_of_connections_modbus; i++)
{
// |> my_modbus[i] = my_modbus_init(mbus_servers[i]->host,mbus_servers[i]->port,MBUS_SLAVE);
// |- And here error: dereferencing pointer to incomplete type ‘modbus_t {aka struct _modbus}’
}
有什麼辦法創造儘可能多的modbus_t根據需要使用malloc?
@SHG隨後的sizeof將工作太。 – tilz0R
@ tilz0R不一定。它可能只有一個前向聲明。然後,typedef是已知的,但不是它的大小,因爲原始結構未知。 – SHG