Dichiarare un vettore di elementi di struct C, e hanno il numero di elementi sia i (un ingresso di tipo int)

StackOverflow https://stackoverflow.com/questions/574060

  •  05-09-2019
  •  | 
  •  

Domanda

Si prega di guardare il codice (e perdonare la mancanza di conoscenza). Produce errori che non riuscivo a risolvere. Devo dichiarare un vettore di elementi di struct C, ma mi serve il numero di elementi essere I (un ingresso di tipo int).

Ho provato anche altri approcci, ma in tutti loro ho ricevuto un errore (non in grado di convertire C a int, ecc). Come posso fare questo?

# include < iostream >
using std::cout;
using std::cin;
using std::endl;

# include < vector >
using std::vector;

struct C{
    int cor;
    vector<int>cores;

    };

    void LerVector( vector< C> &array ) ;

int main ()
{
     int n;
    bool done=false;
        bool don=false;
    vector<C>cidade;
    int i;


    while(!done){
    cout<<"Entre o número de cidades "<<endl;
    cin>>n;
    if(n>500)
    {
        cout<<endl;
        cout<<"O número máximo é 500"<<endl;
}
else
done=true;
}
n--;
while(!don){
cout<<"Entre o número de confederações"<<endl;
cin>>i;
if(i>100){
cout<<endl;
cout<<"Número máximo de 100 cidades"<<endl;

}
else {

 LerVector(  cidade) ;

don=true;
}
}


    cin.get();
    return 0;
}
//resolve...
 void LerVector( vector< C> &array ) 
  { 
    for ( size_t i = 0; i < array.size(); i++ ) 
      cin>>array[i];

  } // end function inputVector 
È stato utile?

Soluzione

Proviamo con una spiegazione:)

cin >> array[i];

che cerca di estrarre da cin in un oggetto di struct C. Bene, quindi ha bisogno di un operatore >> che in realtà quel lavoro:

istream & operator>>(istream &is, C &c) {
    is >> c.cor; // or into whatever member 
    return is;
}

Inoltre, come un altro detto, si deve aggiungere in realtà gli elementi al vettore prima:

while(!don){
    cout<<"Entre o número de confederações"<<endl;
    ....
} else {
    cidade.resize(i); // resize to i elements
    LerVector(cidade);
    don = true;
}

Per la prossima volta, per favore formattare il testo (corretto rientro esso). E 'stato difficile per me al passaggio attraverso di essa:)

Altri suggerimenti

Quali errori ha generato il codice?

Io non sono anche sicuro di quello che si suppone il codice per fare. In main (), si crea un vettore di C. Ma C contiene anche un vettore di Int di. È quella destinata?

In realtà non sono chiaro che cosa si sta cercando di fare.

Tuttavia, posso già vedere un errore potenziale nel nostro codice:

In LerVector, è entrare con un riferimento a un vettore che attualmente non ha nessun articolo in esso, e quindi ha una dimensione di 0.

Quello che stai cercando di fare è che, fintanto che i è più piccolo della dimensione, che si aggiorna elemento dell'array. Tuttavia, quando si avvia la dimensione è 0 quindi non credo che si anche andare nel circuito di ingresso.

Ora, anche se l'avete fatto, dal momento che il vettore non è inizializzato con qualsiasi dimensione, è possibile ottenere un errore che si sta andando fuori dai limiti. Devi ridimensionare il RRay.

se Credo che quello che si vuole fare, dovrebbe essere simile a questo:

// First create an empty vector of C's
vector<C> cidade;

// cidade has zero elements now
// Read i from user
cin >> i;

// Resize vector to contain i elements
cidade.resize(i);

// Then go on and fill them.
int n;
for (n = 0; n < i; i++) {
  cin >> cores;
  cidade[n].cores.resize(cores);
  // now cidade[n].cores has 'cores' elements, but they are uninitialized
}

Uno dei costruttori std::vector<T> avranno una dimensione iniziale, e se dichiarato, dopo quel numero è sa che si può passare al costruttore.

cin >> n;
std::vector<C> cidade(n);

In alternativa, è possibile utilizzare il metodo di ridimensionamento per modificare le dimensioni di un vettore.

In alternativa, è possibile utilizzare il metodo Add per estendere il vettore (senza dare esplicitamente una dimensione).

Ma, nel complesso, potrebbe essere più facile dare aiuto con una versione completa del codice e maggiori dettagli di ciò che il codice sta cercando di fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top