2016-11-23 15 views
2

下のスニペットから。Cでのネストされた構造の使用

  typedef struct { 
       int Code; 
       int ParentCode; 
      }TypeStudentConfidential; 

      typedef struct { 
       int age; 
       int RollNo; 
       int Rank; 
       char Name[10]; 
      }TypeStudent; 

      typedef struct { 
       char class_name[20]; 
       //XXXXXXXXXXXXXXXXX //How could I declare the TypeClass element here? 
      }TypeClass; 

      int main() 
      { 

       const TypeStudent Stu_Details[] = { 
       { 3, 1, 18, "Mahesh"}, 
       { 3, 1, 7, "Kumar"} 
       }; 

       const TypeStudentConfidential Conf_Details[] = { 
       { 761, 814}, 
       { 124, 562} 
       }; 

       const TypeClass Class_Details[]= { 
       { "Class 10",  Stu_Details}, //struct TypeStudent data 
       { "Class 8",  Conf_Details} //struct TypeStudentConfidential data 
       }; 

       return 0; 
      } 

質問:

1)Class_DetailsからXXXXXXマークされた要素にアクセスする方法)構造体要素

2のtypedefマークXXXXXXを定義する方法

+0

レビューやチューターサービスはありません。 [ask]をお読みください。 – Olaf

+0

TypeStudentとTypeStudentConfidentialは異なる構造です。自分のアドレスを別のタイプのポインタに格納しないでください。 – MayurK

+0

「今は止まっています....」はかなり弱い問題です。あなたが持っている問題を明確に記述してください。エラーをコンパイルするかランタイムエラーが発生します。... .BTW: 'TypeStudent'を期待するものに' TypeStudentConfidential'を格納することはできません。多分あなたは 'union'が必要でしょう – 4386427

答えて

2
typedef struct TypeClass { 
    char class_name[20]; 
    struct TypeStudent* type; 
} TypeClass; 

、あなたは(あなたのコードのsnippitが示唆するように見えるよう)XXXXXXXXXXがおそらくそうのように、unionを使用する必要がありますTypeStudent OR TypeStudentConfidentialのいずれかになりたい場合は今

Typeclass a = {"classA", NULL}; 
Typeclass b = {"classB", NULL}; 
a.type = &b; 
printf("%s\n", a.type->class_name); //prints b's classname 

にアクセスするには:

#include <stdio.h> 


typedef struct TypeClass{ 
     char class_name[20]; 
     union type { 
       struct TypeStudent* students; 
       struct TypeStudentConfidential* studentConfs; 
     } type; 
} TypeClass; 

typedef struct TypeStudent { 
     int age; 
     int RollNo; 
     int Rank; 
     char Name[10]; 
} TypeStudent; 

typedef struct TypeStudentConfidential { 
     int Code; 
     int ParentCode; 
} TypeStudentConfidential; 

int main() { 
     //TypeClass a[2] = {{"C0", {NULL}}, {"C1", {NULL}}}; 

     TypeStudent studs[2] = {{10, 10, 10, "Joe"}, {5, 5, 5, "Bob"}}; 
     TypeStudentConfidential confs[2] = {{1, 2}, {3, 4}}; 

     TypeClass a[2] = {{"C0", {.students = studs}}, {"C1", {.studentConfs = confs}}}; 

     //a[0].type.students = studs; 
     //a[1].type.studentConfs = confs; 

     printf("%s, %s\n", a[0].type.students->Name, (a[0].type.students + 1)->Name); 
     printf("%i, %i\n", a[1].type.studentConfs->Code, (a[1].type.studentConfs + 1)->Code); 
     return 0; 
} 
+0

。これは私の見解からの問題を解決します。 私はこの例を編集して使用しています。つまり、** students = **および**。studentConfs = ** – Mahi

+1

を削除しましたが、ARM Windows GCC Cコンパイラを使用して同様のものを使用しています。例:TypeStudent型の学生のNameの不完全な型への参照を逆参照する – Mahi

関連する問題