выделение памяти для структуры - PullRequest
0 голосов
/ 11 сентября 2010

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 */

Ответы [ 2 ]

10 голосов
/ 11 сентября 2010

С main.c у вас есть только предварительное объявление struct Network_t видимым. Чтобы получить доступ к id из указателя на struct Network_t, вам необходимо определить структуру, которая будет видна в точке, в которой вы разыменовываете ее.

Вы можете переместить определение с driver.c на driver.h.

0 голосов
/ 11 сентября 2010

это работает

в 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...