我得到了函数的两个参数的错误:
//incompatible type for argument of swapStruct
//expected Men100mParticipant but argument is of type struct <anonymous>
我的代码是这样的:
int main(){
...
swapStruct(phaseToBeSorted->phase_result[j-1], phaseToBeSorted->phase_result[j]); //error
...
}
phaseToBeSorted是Men100mPhaseDetails类型,定义为:
typedef struct Men100mPhaseDetails{
char* nameCurrentPhase;
int current_phase;
Men100mParticipant phase_result;
} Men100mPhaseDetails * Men100mPhaseDetails;
虽然pase_result应该是Men100mparticipant的数组。 typedef按原样给出,我无法改变它。
这是Men100mparticipant的声明:
typedef struct {
char nameOfParticipant[MAX_LEN_NAME];
double* scores[4];
} Men100mparticipant, *Men100mParticipant;
这是函数swapStruct的声明:
static void swapStruct(Men100mParticipant a, Men100mParticipant b);
我不明白这是什么问题,我很乐意帮助解决这个问题。
答案 0 :(得分:0)
您需要使用:
swapStruct(&phaseToBeSorted->phase_result[j-1], &phaseToBeSorted->phase_result[j]);
编译器正在尽力而为,但结构类型名称令人困惑。
它实际上有效但为什么是&#39;&amp;&#39;需要的?
phaseRoBeSorted->phase_result[j-1]
的类型为Men100mparticipant
,带有两个小写p&#39; - 所以它是一个结构。 swapStruct
函数接受类型为Men100mParticipant
的两个参数(带有大写P),因此它需要两个指针。当然,&
传递数组元素的地址,以便函数获取指针,而不是结构的副本。
这个typedef
(似乎由课程教师提供,无法更改)是可怕的:
typedef struct { … } Men100mparticipant, *Men100mParticipant;
第一个字母P的情况确定该类型是否是指针,这是一个灾难。一般来说,Is it a good idea to typedef pointers?表示&#34;否&#34;。当有需要时(我不相信这是可能需要它的一个例子),使得差异比使用大写和小写部分通过名称更明确。