gcc 4.4.4 c89
我一直在“不能取消引用不完整类型”。
但是,我确信我的结构类型完整。我返回Network_t实例,它是指向已分配内存的指针。我应该能够取消那种记忆。
非常感谢任何建议,
我的头文件中有这个: driver.h
typedef struct Network_t Network_t;
Network_t* create_network(int id);
实施档案 driver.c
#include "driver.h"
struct Network_t {
int id;
};
Network_t* create_network(int id)
{
Network_t *network = malloc(sizeof *network);
if(network) {
network->id = id;
}
return network;
}
在我的main.c
#include "driver.h"
Network_t *network = NULL;
network = create_network(1);
printf("Network ID: [ %d ]\n", network->id); /* Cannot dereference pointer to incomplete type */
答案 0 :(得分:10)
从main.c
开始,您只能看到struct Network_t
的前瞻声明。要从指向id
的指针访问struct Network_t
,您需要在取消引用它的位置显示结构的定义。
您可以将定义从driver.c
移至driver.h
。
答案 1 :(得分:0)
这个有效
在driver.h中
#include <stdio.h>
#include<stdlib.h>
struct Network_t{
int id;
};
Network_t *create_network( int id){
Network_t *network=(Network_t *)malloc(sizeof(network));
if (network){
network->id=id;
}
return network;
}
在Network.cpp
中#include <iostream>
#include "driver.h"
using namespace std;
int main(){
Network_t *network=NULL;
network=create_network(1);
printf("Network ID:[%d]\n",network->id);
return 0;
}
结果:
Network ID:[1]