2009-02-22 14 views
-2

Veuillez regarder ce code (et pardonnez le manque de connaissance). Il génère des erreurs que je n'ai pas pu résoudre. Je dois déclarer un vecteur d'éléments de la structure C, mais j'ai besoin du nombre d'éléments soit i (une entrée de type int).Déclarez un vecteur d'éléments de la structure C, et ayez le nombre d'éléments soit i (une entrée de type int)

J'ai aussi essayé d'autres approches mais dans toutes j'ai reçu une erreur (impossible de convertir C en int, etc.). Comment puis-je faire ceci?

# 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 
+1

Faites un vrai titre s'il vous plaît –

Répondre

3

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, s'il vous plaît formater le texte (corriger le retrait). C'était difficile pour moi de passer par là :)

0

si je suppose que ce que vous voulez faire, il devrait ressembler à 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 
} 
1

Quelles sont les erreurs ne génère votre code?

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

1

Je ne comprends pas vraiment ce que vous essayez de faire.

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

En LerVector, vous venez avec une référence à un vecteur qui ne possède aucun objet en elle, et a donc une taille de 0 Ce que vous essayez de faire, c'est que tant que i est plus petit que la taille, vous mettez à jour cet élément dans le tableau. Cependant, lorsque vous démarrez la taille est 0, je ne pense pas que vous allez même dans la boucle d'entrée.

Maintenant, même si vous l'avez fait, puisque le vecteur n'est initialisé avec aucune taille, vous risquez d'obtenir une erreur de sortie de limite. Vous devez redimensionner la raie.

0

L'un des constructeurs std::vector<T> prend une taille initiale, et s'il est déclaré après que ce nombre est connu, vous pouvez le passer au constructeur.

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

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

Ou vous pouvez utiliser la méthode add pour étendre le vecteur (sans indiquer explicitement une taille). Mais dans l'ensemble, il peut être plus facile de donner de l'aide avec une version complète du code et plus de détails sur ce que le code essaie de faire.