IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Passer un objet en parametres: scalar VS non-scalar?


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Passer un objet en parametres: scalar VS non-scalar?
    Bon bon le c++ me plait mais me casse la tête!

    J'ai écrit un classe Grille et une classe Joueur que j'instancie.
    Dans un main, je veux passer cette "Grille g" et "Joueur j" en paramètres dans une fonction mais ça ne fonctionne pas. Je croyais devoir ajouter & devant les param mais non, ça ne suffit pas. J'obtiens l'erreur "conversion from `Grille*' to non-scalar type `Grille' requested". Même erreur pour le Joueur.

    Voici un peu de code pour vous situer:

    Ex de la classe joueur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Joueur::Joueur(string nom, int pointage){
    	this->nom = nom;
    	this->pointage = pointage;
    ....
    }
    Voici la fonction qui me cause problème (pas d'erreur à la compilation en passant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    int choixColonneUtilisateur(Grille g, Joueur j, int ligne)  //  *************** A CODER
    {
    	g.afficherGrille();
    	int colonne = saisirEntier(0, g.getDim(), ": Veuillez entrer le numero de colonne de la case choisie : ");
    	if (g.getValeurDeLaCase(ligne, colonne) == 99)
    	{
    		cout << "***Choix invalide***" << endl;
    		return 0;
    	}else
    	{
    		int tmp = g.getValeurDeLaCase(ligne, colonne);
    		g.setValeurDeLaCase(ligne, colonne, 99);
    		j.setPointage(j.getPointage() + tmp);
    		return tmp;
    	}
    }
    Mais voilà! Si j'appel cette fonction dans un main, exempe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ............
    if (veuxCommencer.compare("oui") == 0)
    	{
    		int temp = choixColonneUtilisateur(g, j1, 0);
    	}else..........
    	{
    La ligne mauve soulignée me donne l'erreur scalar....

    Que faire?

    Merci

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    class ma_classe
    {
     // [..]
    };
     
    void ma_fonction_reference(ma_classe const &mon_objet_);
    void ma_fonction_valeur(ma_classe  mon_objet_);
     
    int main()
    {
       ma_classe un_objet;
       ma_fonction_reference(un_objet);
       ma_fonction_valeur(un_objet);
       return 0;
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Je ne comprends pas ta réponse!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Hmm est-ce que je me trompes ou je dois écrire un constructeur de copie?

    Si le code du constructeur est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Grille::Grille(int germe, int dim){
    	this->germe = germe;
    	this->dim = dim;
    	this->grille = grille;
     
    	// Appel au consructeur du germe
    	OutilsTp1 outil ( germe );
     
    	// Creation du tableau 2D
    	grille = new int *[dim];
    	for( int i = 0; i < dim; i++ ) {
    		grille[i] = new int[dim];
    	}
     
    	// Remplissage aleatoire de la grille
    	grille[0][0] = 99;
    	for ( int i = 0; i < dim; ++i ) {
    		for ( int j = 0; j < dim; ++j ) {
    		    if ( i != 0 || j != 0 ) {
    		    	grille[i][j] = outil.donnerNombre();
    		    } // if
    		} // for j
    	} // for i
    }
    À quoi devrait ressembler celui du constructeur de copie?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Grille::Grille(const Grille & g)  // constructeur de copie
    {
         À L'AIDE!!!!!!}

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Juste avec l'erreur, je pense que tu passes un pointeur là où ta fonction attend un objet. Pour rémédier à cela,il faut déférencer ton pointeur (En faisant *pointeur).

    Pour être sûr de mon analyse, il faudrait que tu montres comment tu déclares g et j1.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Hmmm pas certain, tu veux voir le code source de mon prog?

  7. #7
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Nan, juste comment tu déclares tes variables g et j1 (celles que tu utilises dans ton exemple)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    Bon j'ai résolu mon problème, je devais juste écrire mon contrusteur de copie, ajouter des * et des & par ci par la et hop!

    Bon foutez vous pas dma gueule jcommence mais jsuis contemps.

    Merci à tout ceux qui m'ont apporté leur support!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment passer des objet en parametre?
    Par Siñal dans le forum Langage
    Réponses: 9
    Dernier message: 01/06/2009, 09h35
  2. passer un objet en parametre d'une methode RMI
    Par Dryss51 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 22/02/2008, 02h10
  3. Passer un objet en parametre
    Par awikatchikaen dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/05/2007, 11h43
  4. Passer un objet en parametre avec html:link
    Par faico dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/05/2007, 00h40
  5. Réponses: 4
    Dernier message: 20/04/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo