1

我有代码:

main() 
{
   typedef struct
   {
      int data;
   } Information;

   typedef Information *PtrInformation;

   typedef struct InformationListStruct *PtrInformationListStruct;

   typedef struct InformationListStruct
   {
      PtrInformationListStruct ptrNext;
      PtrInformation ptrInf;
   } PtrInformationListStructElement;

   //==============================

   PtrInformationListStruct list;
   list = (PtrInformationListStruct)malloc(sizeof(InformationListStruct));
   PtrInformation ptr = (*list).ptrInf;  // error !!!

}

编译器抛出错误:

  • "ptrInf" 不是 InformationListStruct 的成员,因为该类型尚未在函数 main() 中定义

如果我把这一行:

typedef struct InformationListStruct *PtrInformationListStruct;

在这行之后:

   typedef struct InformationListStruct
   {
      PtrInformationListStruct ptrNext;
      PtrInformation ptrInf;
   } PtrInformationListStructElement;

然后出现其他错误:

  • 函数 main() 中预期的类型名称
  • 声明缺失;在函数 main()

如何正确获取“ptrInf”?

4

3 回答 3

5

你不应该malloc()在 C 中强制转换 return 。另外,使用sizeof,不要重复类型名称:

list = malloc(sizeof *list);
于 2012-06-13T09:22:53.017 回答
3

你需要

 list = (PtrInformationListStruct)malloc(sizeof(struct InformationListStruct));
 //                                               |
 //                                          note struct keyword

或者

 list = (PtrInformationListStruct)malloc(sizeof(PtrInformationListStructElement));

因为你有typedef它。

于 2012-06-13T09:03:40.937 回答
1

您正在使用哪个编译器,在 Visual Studio 中,您的代码编译成功。请避免在函数体内进行类型定义。

于 2012-06-13T09:05:58.330 回答