C++ / Code blocks : no match for operator ...
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

C++ / Code blocks : no match for operator ...



  1. #1
    invite48ca7510

    C++ / Code blocks : no match for operator ...


    ------

    Bonjour à tous,

    je créé un programme avec des classes.

    Dans l'une d'elle, je veux rechercher si un (ou des) voyage(s) existe(nt) dans un tableau (par rapport à un itinéraire) et, si oui, le(s) stocker dans un autre tableau pour rechercher ensuite le prix minimum.

    Seulement, à la compilation, j'ai ce message :

    |error: no match for 'operator[]' in 'moinscher[k]'|
    ||=== Build finished: 1 errors, 0 warnings (0 minutes, 0 seconds) ===|
    Voici le bout de code en question :
    Code:
    Tabvoy moinscher;
        string villd,villa;
    	int i = 0;
    	int cpt=0;
    
    	cout << "Quelle ville de depart voulez-vous ?" << endl;
    	cin >> villd;
    	cout << "Quelle ville d'arrivee voulez-vous ?" << endl;
    	cin >> villa;
    
    	for (i=0 ; i < nbElem ;  i++)
    	{
    
    		if (tab[i].getVilledep()==villd && tab[i].getVillearr()==villa)
    		{
                moinscher[cpt]=tab[i];
    			cpt++;
    		}
    
    	}
    	cout << "Il y a " << cpt << " voyages correspondant a votre itineraire." << endl;
    Informations :
    - tabvoy est un classe dont chaque objet à 4 attributs : une ville de départ, une d'arrivée, un coût au km et la longueur en km (donc deux string et deux float)
    - je veux stocker les voyages correspondant à un itinéraire donné dans un tableau "moinscher", ensuite je rechercherais le minimum du coût au km * longueur dans ce tableau
    - get.Villedep et get.Villearr sont des getteurs permettant d'obtenir la valeur des ville de départ et d'arrivée


    Merci d'avance pour votre aide

    -----

  2. #2
    Dlzlogic

    Re : C++ / Code blocks : no match for operator ...

    Bonjour,
    A première vue, moi je sais pas trop ce qui se passe avec l'association cin et string. Mais ça c'est un détail.
    C'est quoi tab ? un tableau de pointeurs ? non, plutôt un tableau de structures.
    C'est quoi "moinscher" un tableau de pointeurs ? non plutôt un tableau de je sais_pas_quoi.
    Donc, vous égalisez un élément par rapport à un autre qui n'ont pas la même organisation.
    Un élément de tab est une structure contenant 4 éléments, il y aurait donc normalement 4 valeurs à copier.
    Décrivez en détail vos structures, au moins pour qu'on puisse les voir, et je pense que ce sera déjà plus clair.
    Dernière modification par Dlzlogic ; 18/03/2013 à 15h19.

  3. #3
    invite48ca7510

    Re : C++ / Code blocks : no match for operator ...

    Bonjour,

    tab est un attribut privé de la classe Tabvoy.

    Tabvoy est un tableau d'objets instanciés par la classe voyage

    Voici quelques lignes des différentes classes :

    Voyage.cpp :
    Code:
    Voyage::Voyage() : villeDepart(), villeArrivee(), longueur(1,30000,1), pkilo(0.1,3,0.1) {}
    Voyage.h :
    Code:
    class Voyage
    {
    
    public : 
    	Voyage();
    	void afficher();
    	float prixtotal();
    	void saisir();
    	void Compare(Voyage voy);
    	string getVilledep();
    	string getVillearr();
    
    	
    private :
    	ReelContraint longueur, pkilo;
    	Chaine villeDepart, villeArrivee;	
    };

    Tabvoy.cpp :
    Code:
    Tabvoy::Tabvoy()
    {
    	nbElem = 0;
    }
    
    //-----------------------------------------------------
    
    void Tabvoy::ajouter()
    {
    
    
    	if (nbElem==NMAX_VOYAGES)
    	cout << "ERREUR : Le nombre maximum de voyages est atteint." << endl;
    	else
    	{
    		Voyage v;
    		v.saisir();
    		tab[nbElem++] = v;
    		cout << endl <<  "Le voyage a bien ete enregistre. " << endl;
    	}
    
    
    }
    Je pensais que comme moinscher et tab sont tous les deux du même type (tabvoy (en tout cas, c'est ce que je pense !)), on pouvait effectuer l'affectation moinscher[cpt]=tab[i]

  4. #4
    invite48ca7510

    Re : C++ / Code blocks : no match for operator ...

    Je suis c0n ! ^^

    Tab est un objet de voyage, pas de tabvoy ! Donc il faut que moinscher aussi soit on objet de voyage ! Je vais essayer et vous tenir au courant

  5. A voir en vidéo sur Futura
  6. #5
    invite48ca7510

    Re : C++ / Code blocks : no match for operator ...

    Finalement, voici mon code pour tabvoy :

    Code:
    void Tabvoy::recherche_et_prix()
    {
    
        Voyage moinscher[NMAX_VOYAGES],mini;
        string villd,villa;
    	int i = 0;
    	int cpt=0;
    
    	cout << "Quelle ville de depart voulez-vous ?" << endl;
    	cin >> villd;
    	cout << "Quelle ville d'arrivee voulez-vous ?" << endl;
    	cin >> villa;
    
    	for (i=0 ; i < nbElem ;  i++)
    	{
    
    		if (tab[i].getVilledep() == villd && tab[i].getVillearr() == villa)
    		{
                moinscher[cpt]=tab[i];
    			cpt++;
    		}
    
    	}
    	cout << "Il y a " << cpt << " voyages correspondant a votre itineraire." << endl;
        
        mini=moinscher[0];
    	for (i=0 ; i < nbElem ;  i++)
    	{
    
    		if (moinscher[i].prixtotal() > moinscher[i+1].prixtotal()) mini=moinscher[i+1];
    
    	}
    	mini.afficher();
    }
    Or, je n'arrive pas à afficher le voyage au prix total minimum. A l'écran, j'ai juste un voyage par défaut... (i.e. : pas de ville de départ ni d'arrivée, une longueur de 1km et un coût kilométrique de 0.1€/km)

  7. #6
    Dlzlogic

    Re : C++ / Code blocks : no match for operator ...

    Y'a tout de même beaucoup de fautes.

    Je voudrais bien voir la définition de la classe Tabvoy.
    C'est quoi le type Voyage, je suppose une classe, il faudrait aussi en donner la définition.
    Il ne semble pas que l'opérateur '=' soit défini dans la classe Voyage.
    Que fait la fonction 'GetVilledep()' et 'GetVillearr()'
    Que vaut moinscher[nbElem] ?

  8. #7
    Chanur

    Re : C++ / Code blocks : no match for operator ...

    Bonjour,
    Citation Envoyé par Lechero Voir le message

    Code:
        mini=moinscher[0];
        for (i=0 ; i < nbElem ;  i++)
        {
    
            if (moinscher[i].prixtotal() > moinscher[i+1].prixtotal()) mini=moinscher[i+1];
    
        }
        mini.afficher();
    Or, je n'arrive pas à afficher le voyage au prix total minimum. A l'écran, j'ai juste un voyage par défaut... (i.e. : pas de ville de départ ni d'arrivée, une longueur de 1km et un coût kilométrique de 0.1€/km)
    D'accord avec Dlzlogic : tu ne nous simplifies pas la vie en nous laissant deviner la moitié des éléments ...


    Bon. Supposons que la classe Tabvoy contienne d'une certaine façon une liste d'objets Voyage.
    On peut imaginer que nbElem représente le nombre d'éléments de cette liste ...

    Si c'est ça, alors il est clair que la boucle qui précède ne peut pas donner le voyage au prix total minimum.
    Elle donne le dernier élément de la liste dont le prix est inférieur à l'élément qui le précède immédiatement, et le premier élément de la liste s'il sont triés par prix croissant ...
    D'autre part, elle suppose que la liste contient
    nbElem+1 éléments (puisque i va de 0 à nbElem non compris, et qu'on utilise i+1)
    Si la liste contient effectivement nbElem éléments, le dernier élément testé est en dehors de la liste et c'est pour ça que ses valeurs ne sont pas définies.
    Si pour un élément non défini le prix est inférieur à celui des éléments initialisé, c'est normal que ce soit celui là qu'on trouve (puisque son prix est inférieur à celui de l’élément nbElem-1).

    A+
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. problème code blocks
    Par invite7167e6ff dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 14/12/2011, 18h11
  2. problème code blocks
    Par invite3ba0dddb dans le forum Logiciel - Software - Open Source
    Réponses: 35
    Dernier message: 26/04/2010, 11h48
  3. code:blocks+ gnuplot
    Par invite6f723495 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 29/03/2010, 15h46
  4. [programmation] code:blocks C++
    Par invited9d78a37 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 20/03/2008, 19h24
  5. Code::Blocks et Qt
    Par invite4c1ed2fa dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 20/02/2006, 20h59