Déclarer un vecteur d'éléments de structure C, et possède le nombre d'éléments soit i (une entrée de type int)

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

  •  05-09-2019
  •  | 
  •  

Question

S'il vous plaît regarder ce code (et pardonner le manque de connaissances). Il génère des erreurs que je ne pouvais pas résoudre. Je dois déclarer un vecteur d'éléments de structure C, mais je dois le nombre d'éléments soient i (une entrée de type int).

J'ai aussi essayé approches autres mais tous je reçu une erreur (ne peut pas convertir C int, etc.). Comment puis-je faire?

# 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 
Était-ce utile?

La solution

Essayons avec une explication:)

cin >> array[i];

qui essaie d'extraire de cin un objet de struct C. Eh bien, il a besoin d'un opérateur >> qui ne fait que le travail:

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

En outre, comme mentionné un autre, vous devez ajouter réellement les éléments au premier vecteur:

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

Pour la prochaine fois, formatez le texte s'il vous plaît (tiret corriger). Il était difficile pour moi à l'étape à travers elle:)

Autres conseils

Quelles sont les erreurs ne votre code générer?

Je suis également pas sûr de votre code est censé faire. En main (), vous créez un vecteur de C. Mais C contient également un vecteur de années int. Est-ce prévu?

Je ne suis pas vraiment clair ce que vous essayez de faire.

Cependant, je peux déjà voir une erreur potentielle dans notre code:

Dans LerVector, vous venez avec une référence à un vecteur qui n'a pas tous les éléments en elle, et a donc une taille de 0.

Qu'est-ce que vous essayez de faire est que, tant que i est inférieure à la taille, vous mettez à jour cet élément dans le tableau. Toutefois, lorsque vous commencez la taille est 0 donc je ne pense pas que vous allez même aller dans la boucle d'entrée.

Maintenant, même si vous avez fait, puisque le vecteur est pas initialisé avec toute taille, vous pouvez obtenir une erreur que vous allez en dehors des limites. Vous devez redimensionner le rray.

si je suppose que ce que vous voulez faire, il devrait être comme ceci:

// 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
}

L'un des constructeurs de std::vector<T> auront une taille initiale, et si elle est déclarée après ce nombre est que vous pouvez le transmettre au constructeur.

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

Vous pouvez également utiliser la méthode Redimensionner pour modifier la taille d'un vecteur.

Vous pouvez également utiliser la méthode d'ajout d'étendre le vecteur (sans donner explicitement une taille).

Mais dans l'ensemble, il pourrait être plus facile de donner l'aide d'une version complète du code et plus de détails sur ce que le code tente de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top