我試圖發送一個結構從主要.h文件在那裏操縱。這裏是我的.C代碼:注意:期望'結構填充',但參數的類型'結構信息'
#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:error:'doyourjob'參數1的不兼容類型
funcon.h:23:note:expected'struct filler'但參數的類型是'struct Info'
我也試過在f中更改結構體填充不會將信息放入Info中,但是會出現範圍錯誤。
將函數定義放在頭文件中的風格非常糟糕。你爲什麼要傳遞一個類型信息「stuff」的結構給doyourjob(...)函數,這個函數顯然需要一個類型填充的結構體?如果他們是指針,你可以將它們施放,但是你傳遞整個結構。 – cleblanc
我不介意在struct類型的信息,但由於範圍編譯錯誤,我認爲我不得不重新命名.h中的結構類型。如果情況並非如此,那麼如何將結構發送給我的.h並保存所有信息?是否有可能刪除我在.h中創建的結構,並將簽名保存爲要傳遞的結構信息? – AlwaysLearning
我會將'struct Info {...}'移動到.h文件,並將'doyourjob(...)'移動到.c文件並使其使用Info結構類型。 – cleblanc