C++指向在另一个结构内部的结构中定义的变量(由用户填充)

C++ Pointing a variable (to be filled by the user) that is defined in a struct which is inside another struct

本文关键字:结构 变量 用户 填充 定义 另一个 内部 C++      更新时间:2023-10-16

我正在处理列表。我想执行在另一个结构中的结构中定义的变量插入(用户端)。

我的部分代码是这样的:

#include <iostream>
#include <string>
using namespace std;

// Global variables
struct gioco {string piattaforma;
              string titolo;
              string genere;
              string sviluppatore;
              string publisher;
              struct data {int giorno;
                           int mese;               // Formato data GG/MM/AAAA
                           int anno;  };
              bool disponibile;
              gioco * recordSuccessivo; };

// Prototypes
bool stampaLista (gioco *);
gioco * aggiungiGioco (gioco *);

// MAIN Function
int main (void)
         {// Local Variables (MAIN)
          char sceltaMenu = '';
          gioco * puntatoreTesta = NULL;
          gioco * puntatoreCoda = NULL;
          gioco * puntatoreDeposito = NULL;

          // [more code]
          stampaLista (puntatoreTesta);
          // [more code + ASCII menu]
          cin>>sceltaMenu;
          switch (sceltaMenu)
                 {case '1':
                    puntatoreDeposito = aggiungiGioco (puntatoreTesta);
                    break;
                  // [more cases + default]
                 }

          return 0;
         }

// Other Functions
bool stampaLista (gioco * puntatoreTesta)
                 {cout<<endl<<"PIATTAFORMA"<<"t"<<"TITOLO"<<"t"<<"GENERE"<<"t"<<"SVILUPPATORE"<<"t"<<"PUBLISHER"<<"t"<<"DATA DI USCITA"<<"t"<<"DISPONIBILE"<<endl<<endl;
                  if (puntatoreTesta != NULL)
                     {gioco * puntatoreDeposito = NULL;
                      puntatoreDeposito = puntatoreTesta;
                      do {cout<<puntatoreDeposito -> piattaforma<<"t"
                              <<puntatoreDeposito -> titolo<<"t"
                              <<puntatoreDeposito -> genere<<"t"
                              <<puntatoreDeposito -> sviluppatore<<"t"
                              <<puntatoreDeposito -> publisher<<"t"
                              <<puntatoreDeposito -> gioco.data.giorno<<"/"<<puntatoreDeposito -> gioco.data.mese<<"/"<<puntatoreDeposito -> gioco.data.anno<<"t"
                              <<puntatoreDeposito -> disponibile<<endl;
                          puntatoreDeposito++;
                         } while (puntatoreDeposito != NULL);

                      return false;
                     }
                  else
                     {cout<<"La lista e' vuota!"<<endl<<endl<<endl;

                      return true;
                     }
                 }

gioco * aggiungiGioco (gioco * puntatoreTesta)
                      {// Local Variables
                       gioco * puntatoreNuovo = new gioco;
                       puntatoreNuovo -> recordSuccessivo = NULL;

                       cout<<"NUOVO RECORD"<<endl<<endl;
                       cout<<"Piattaforma:"<<"t";
                       cin>>puntatoreNuovo -> piattaforma;
                       cout<<"Titolo:"<<"t";
                       cin>>puntatoreNuovo -> titolo;
                       cout<<"Genere:"<<"t";
                       cin>>puntatoreNuovo -> genere;
                       cout<<"Sviluppatore:"<<"t";
                       cin>>puntatoreNuovo -> sviluppatore;
                       cout<<"Publisher:"<<"t";
                       cin>>puntatoreNuovo -> publisher;
                       cout<<"Data di Uscita:"<<endl;
                       cin>>puntatoreNuovo -> gioco.data.giorno>>puntatoreNuovo -> gioco.data.mese>>puntatoreNuovo -> gioco.data.anno;

                       return puntatoreNuovo;
                      }

当我使用语法gioco.data.giorno/.mese/.anno通过使用new node构造函数指针指向这些嵌套变量来访问这些嵌套变量时,在打印和字段填充函数中,我都会遇到"无效使用struct gioco"的错误。

这几乎可以肯定是一个语法错误的问题,尽管我看不出解决这个问题的正确方法。关于如何实现我想要实现的目标,有什么建议吗?

您需要以这种方式定义您的结构:

 // Global variables
 struct gioco {string piattaforma;
          string titolo;
          string genere;
          string sviluppatore;
          string publisher;
          struct data {int giorno;
                       int mese;               // Formato data GG/MM/AAAA
                       int anno;  } data_field;
          bool disponibile;
          gioco * recordSuccessivo; };

然后你可以访问它:

                   gioco* puntatoreNuovo = new gioco;
                   puntatoreNuovo->recordSuccessivo = NULL;
                   ......
                   cout<<"Data di Uscita:"<<endl;
                   cin>>puntatoreNuovo->data_field.giorno >> puntatoreNuovo->data_field.mese >> puntatoreNuovo->data_field.anno;
                   ......