2016-03-04 5 views
0

Я пытаюсь отправить структуру из main в .h-файл, чтобы туда можно было манипулировать. Вот код в моем .c:note: expected 'struct filler', но аргумент имеет тип 'struct Info'

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include "funcon.h" 
enum sign{ 
positive, 
negative 
}sign; 

enum type{ 
integer, 
floating 
}type; 

struct Info{ 
enum sign leading; 
enum type out; 
char * exp; 
char * fraction; 
char * binary; 
}; 


int main(int argc, char ** argv){ 
struct Info stuff; 
stuff.exp = malloc(8); 
stuff.fraction = malloc(23); 
stuff.binary = malloc(31); 
strncpy(stuff.exp, argv[1]+1,8); 
strcpy(stuff.fraction,argv[1]+9); 
strcpy(stuff.binary, argv[1] + 1); 
printf("%s\n", stuff.exp); 
printf("%s\n", stuff.fraction); 
doyourjob(stuff); 
return 0; 
} 

Это .h файл:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
enum signf{ 
positive1, 
negative1 
}signf; 

enum typef{ 
integer2, 
floating2 
}typef; 

struct filler{ 
enum signf leading2; 
enum typef out2; 
char * exp2; 
char * fraction2; 
char * binary2; 
}; 

int doyourjob(struct filler solveme){ 

if(solveme.out2 == integer2){ 

    if(solveme.leading2 == positive1){ 
    int hold; 
    sscanf(solveme.binary2, "%d", &hold); 

    }else{ 

    } 

}else{//When solveme is a floating type 

} 
} 

Когда я компилирую, я получаю ошибку:
function.c: В функции 'главный':
function.c: 51: ошибка: несовместимый тип для аргумента 1 '' doyourjob
funcon.h: 23: Примечание: ожидаемый 'структура наполнителя', но аргумент типа 'STRUCT Info'
Я также попытался изменение наполнителя структуры в f uncon.h в Info, но затем я получаю ошибку определения области видимости.

+0

Это очень плохой стиль для размещения определений функций в ваших заголовочных файлах. Почему вы хотите передать структуру типа «материал» для функции doyourjob (...), которая явно берет структуру типа наполнителя? Если бы они были указателями, вы могли бы просто бросить их, но вы передаете всю структуру. – cleblanc

+0

Я бы не отказался от ввода информации о структуре типа, но из-за ошибки компиляции я предположил, что мне пришлось переименовать тип структуры в .h. Если это не так, как мне отправить структуру на мой .h с сохранением всей ее информации? Можно ли удалить структуру, созданную мной в .h, и сохранить подпись в качестве структуры Info, которая будет передана? – AlwaysLearning

+0

Я бы переместил 'struct Info {...}' в .h-файл и переместил 'doyourjob (...)' в .c-файл и использовал его в качестве типа структуры Info. – cleblanc

ответ

1

Типы несовместимы. Они должны быть одного типа. Изменение типа на Строка Info была верна, но вам также нужно переместить объявление struct Info в место где-то int doyourjob (..) может это увидеть. Например. до int doyourjob (..) в .h файле.

На боковой ноте вы должны объявлять, но не реализовывать функции в файлах заголовков. То есть в вашем .h добавить:

struct Info { 
    // ... 
} 

int doyourjob(struct Info); 

Теперь в файле .c (скажем doyourjob.c) у вас есть:

#include "doyourjob.h" 

int doyourjob(struct Info) { 
    // Your code here 
} 

Наконец, вам нужно собрать и связать оба файла.

+0

Вы удалили свое старое объявление struct. У вас должна быть только одна информация о структуре, и она должна быть до _int doyourjob (struct Info) _ –

+0

Означает ли это, что у моего оригинала .c Я работаю с, больше не должен иметь struct Info? – AlwaysLearning

+0

Да. Вам нужно только объявить структуру один раз. Когда вы включаете заголовочный файл, (концептуально) содержимое файла заголовка копируется в исходный файл и становится вашим новым исходным кодом. –

Смежные вопросы