C - 参数的类型为struct <anonymous>

时间:2016-08-28 10:40:50

标签: c struct typedef

我得到了函数的两个参数的错误:

//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);

我不明白这是什么问题,我很乐意帮助解决这个问题。

1 个答案:

答案 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;。当有需要时(我不相信这是可能需要它的一个例子),使得差异比使用大写和小写部分通过名称更明确。