Указатель структуры C как параметр - PullRequest
1 голос
/ 22 сентября 2010

Я пытаюсь передать указатель на структуру в C, но я не могу:

float calcular_media(struct aluno *aluno) {

Предупреждение о выходе:

C:\WINDOWS\system32\cmd.exe /c gcc main.c aluno.c
aluno.c:7:29: warning: 'struct aluno' declared inside parameter list

Что я делаю не так? Спасибо.

Ответы [ 5 ]

5 голосов
/ 22 сентября 2010

В файле, содержащем строку

float calcular_media(struct aluno *aluno) {

, перед строкой должно быть одно из следующих значений:

  • struct объявление : например, struct aluno;или
  • struct определение : например, struct aluno { char c; int i; double d; }; или
  • включает некоторого заголовочного файла, который имеет один из вышеуказанных: например, #include "aluno.h"

4 голосов
/ 22 сентября 2010

Вы объявляете struct aluno до этой функции?

Либо с полным определением:

struct aluno {
   ...
};

Или хотя бы предварительное объявление:

struct aluno;
3 голосов
/ 22 сентября 2010

Я полагаю, что в конечном итоге вы сделаете что-то вроде этого:

#include <stdio.h>
struct aluno
{
  int nota1;
  int nota2;
}

float calcular_media(struct aluno* individuo) 
{
  printf("nota 1:%d\n", individuo->nota1);
  printf("nota 2:%d\n", individuo->nota2);
}

int main()
{
  struct aluno primeiro_aluno;
  primeiro_aluno.nota1 = 9;
  primeiro_aluno.nota2 = 5;

  calcular_media(&primeiro_aluno);

  return 0;
}
1 голос
/ 22 сентября 2010

У вас есть файл с именем "aluno.h" (с определением struct aluno) и вы включаете его в "aluno.c"?

/* aluno.c */
#include "aluno.h"

float calcular_media(struct aluno *aluno) { /* ... */ }
1 голос
/ 22 сентября 2010

Вам нужно сообщить компилятору, что существует структура aluno, прежде чем вы начнете передавать ее в функции.

struct aluno {
   int x;
   int y;
};

float calcular_media(struct aluno * aluno) {
       // ...
}
...