Renvoie de type int&

Signaler
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Bonjour a tous!

Voila g la fonction suivante:
int& tableau::operator ()(int l, int c)
{
    if ((l>=tab.size())||(c>=(tab[l]).size()))
    {
        cout << "L'element ("<<l<<","<<c<<") n'existe pas."<<endl;
        return ?;
    }
    return tab[l][c];
}

sachant que tab est en fait un vector<vector >.
Que faut t-il que mette à la place du ? pour que le programme ne fasse pas d'erreur.

Merci bcp pour votre aide.

11 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
111
Il te suffit de renvoyer une référence vers un int, normalement, un "&0" devrait marcher.

DarK Sidious

[Responsable API/VB du site www.ProgOtoP.com]
Téléchargez ProgOtoP API Viewer
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Le compilateur me donne l'erreur suivante aprés ta correction :
non-lvalue in unary `&'
Merci de ton aide
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
return 0;
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

tu pense bien que g aussi essayer return 0; mais idem, il me dit que le type ne correspond pas
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
const int tableau::ERREUR=-1;

...
return ERREUR;
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Le compilateur me dit ceci :
`const int tableau::ERREUR' is not a static member of `class tableau'
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ben parce que initialiser comme ca ca ve dire que ERREUR est un membre static de la classe tableau

faut donc pas oublier de le declarer en static dans tableau

class tableau
{
...
static const int ERREUR;
};

const int tableau::ERREUR=-1;

int& tableau::operator ()(int l, int c)
{
if ((l>=tab.size())||(c>=(tab[l]).size()))
{
cout << "L'element ("<<l<<","<<c<<") n'existe pas."<<endl;
return ERREUR;
}
return tab[l][c];
}
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Aprés modif, toujours une erreur
conversion from `const int' to `int &' discard qualifiers
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
t sur?

tu a bien fait comme ca?

#include 

struct tableau
{

static int ERREUR;

int& f();
};

int tableau::ERREUR=-1;

int& tableau::f()
{
return ERREUR;
}

int main()
{

tableau t;
std::cout << t.f() << std::endl;
}
Messages postés
29
Date d'inscription
mardi 23 mars 2004
Statut
Membre
Dernière intervention
23 juin 2006

Merci pour ton aide.
C bon, g réussi a resoudre mon prob
Il m'a suffit de faire
int ERREUR=-1;

au début du programme

puis dans la fonction
return ERREUR;


Merci qd mm
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
quoi qu'il en soit tu aura retenu que int& en retour ou en parametre d'une fonction ca ve juste direqu'il sera passer par reference (par adresse) apres c'est transparent
sinon renvoyer un reference sur un tyoe de base ca a pas trop d'interet