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 :

probleme de d�butant [D�butant(e)]


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Par d�faut probleme de d�butant
    Bonjour mon code ne fonctionne pas bien je sais qu'il y a des probleme au niveau des pointeurs dans le main
    si quelqu'un peut m'aider merci d'avance

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <iostream>
     
    using namespace std; 
     
    int saisirtab(int* tab, int n)
    {
        int i;
        cout << "Veuillez remplir le tableau \n";
        for (i=0; i<n; i++)
        {
            cin >> tab[i];
        }   
    }
     
    int affichetab(int* tab, int n)
    {
        int i;
        for (i=0;i<n; i++)
        {
            cout << tab[i] << " " ;
        }
     
        cout << endl;
     
    }
     
    int echange(int *i, int *j)
    {
        int temp;
        temp=*i;
        *i=*j;
        *j=temp;
    }
     
    int echange(int &i,int &j)
    {
        int temp;
        temp=i;
        i=j;
        j=temp;
    }
     
    namespace valeur{
        int echange(int i, int j)
        {
            int temp;
            temp=i;
            i=j;
            j=temp;
        }
     
    }
     
     
    int main ()
    {
        //par pointeur
        int* a;
        int* b;
        int x = 2;
        int y = 4;
     
        int *tabi;
        tabi = new int [5];
        saisirtab(tabi, 5);
        affichetab(tabi, 5);
        *a = x;
        *b = y;
        echange(*a, *b);
        cout << "a=" << a << " b=" << b << " ";
        &a = &x;
        &b = &y;
        echange(&a, &b);
        cout << "a=" << a << " b=" << b << " ";
        valeur::echange(a,b);
        cout << "a=" << a << " b=" << b << " ";   
    }

  2. #2
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    Bienvenue sur le forum C++ !

    1) ton message n'a rien � faire dans la section SL/STL (biblioth�que standard du C++), la prochaine fois met le dans C++ directement

    2) tu vois qu'il y a une probl�me, mais indique nous les erreurs de compilation ! : je met celles que j'obtiens car tu as au moins indiqu� un code assez clair et complet :


    Building target �test� � (7 errors, 5 warnings)
    cd /Users/lioobayoyo/test
    /usr/bin/gcc-4.0 -x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -g -O0 -Wreturn-type -Wunused-variable -fmessage-length=0 -mtune=G5 -mfix-and-continue -fvisibility-inlines-hidden -I/Users/lioobayoyo/test/build/test.build/test.build/test.hmap -F/Users/lioobayoyo/test/build -I/Users/lioobayoyo/test/build/include -I/Users/lioobayoyo/test/build/test.build/test.build/DerivedSources -c /Users/lioobayoyo/test/main.cpp -o /Users/lioobayoyo/test/build/test.build/test.build/Objects-normal/ppc/main.o
    /Users/lioobayoyo/test/main.cpp: In function `int main()':
    /Users/lioobayoyo/test/main.cpp:71: error: non-lvalue in assignment
    /Users/lioobayoyo/test/main.cpp:72: error: non-lvalue in assignment
    /Users/lioobayoyo/test/main.cpp:73: error: no matching function for call to 'echange(int**, int**)'
    /Users/lioobayoyo/test/main.cpp:27: note: candidates are: int echange(int*, int*)
    /Users/lioobayoyo/test/main.cpp:35: note: int echange(int&, int&)
    /Users/lioobayoyo/test/main.cpp:75: error: invalid conversion from 'int*' to 'int'
    /Users/lioobayoyo/test/main.cpp:75: error: initializing argument 1 of 'int valeur::echange(int, int)'
    /Users/lioobayoyo/test/main.cpp:75: error: invalid conversion from 'int*' to 'int'
    /Users/lioobayoyo/test/main.cpp:75: error: initializing argument 2 of 'int valeur::echange(int, int)'
    /Users/lioobayoyo/test/main.cpp: In function `int saisirtab(int*, int)':
    /Users/lioobayoyo/test/main.cpp:13: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int affichetab(int*, int)':
    /Users/lioobayoyo/test/main.cpp:25: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int echange(int*, int*)':
    /Users/lioobayoyo/test/main.cpp:33: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int echange(int&, int&)':
    /Users/lioobayoyo/test/main.cpp:41: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int valeur::echange(int, int)':
    /Users/lioobayoyo/test/main.cpp:50: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int main()':
    /Users/lioobayoyo/test/main.cpp:71: error: non-lvalue in assignment
    /Users/lioobayoyo/test/main.cpp:72: error: non-lvalue in assignment
    /Users/lioobayoyo/test/main.cpp:73: error: no matching function for call to 'echange(int**, int**)'
    /Users/lioobayoyo/test/main.cpp:27: note: candidates are: int echange(int*, int*)
    /Users/lioobayoyo/test/main.cpp:35: note: int echange(int&, int&)
    /Users/lioobayoyo/test/main.cpp:75: error: invalid conversion from 'int*' to 'int'
    /Users/lioobayoyo/test/main.cpp:75: error: initializing argument 1 of 'int valeur::echange(int, int)'
    /Users/lioobayoyo/test/main.cpp:75: error: invalid conversion from 'int*' to 'int'
    /Users/lioobayoyo/test/main.cpp:75: error: initializing argument 2 of 'int valeur::echange(int, int)'
    /Users/lioobayoyo/test/main.cpp: In function `int saisirtab(int*, int)':
    /Users/lioobayoyo/test/main.cpp:13: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int affichetab(int*, int)':
    /Users/lioobayoyo/test/main.cpp:25: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int echange(int*, int*)':
    /Users/lioobayoyo/test/main.cpp:33: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int echange(int&, int&)':
    /Users/lioobayoyo/test/main.cpp:41: warning: control reaches end of non-void function
    /Users/lioobayoyo/test/main.cpp: In function `int valeur::echange(int, int)':
    /Users/lioobayoyo/test/main.cpp:50: warning: control reaches end of non-void function
    Build failed for target "test" using build style "Development" (7 errors, 5 warnings)

  3. #3
    Membre exp�riment�
    Profil pro
    Dev
    Inscrit en
    D�cembre 2007
    Messages
    191
    D�tails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Dev

    Informations forums :
    Inscription : D�cembre 2007
    Messages : 191
    Par d�faut
    En r�sumant grosso modo il y a deux types d'erreurs :

    tu as des fonctions qui ne renvoient pas de valeur (echange, affiche....). Ces fonctions doivent donc etre void et non int. (les warning le montrent : il n'y a aucun "return" dans le corps de la fonction, le compilo le voit et te pr�vient que si par malheur tu faisais "comme si" tes fonctions retournaient qqchose, alors il y aurait un comportement ind�termin�. Ex :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    int a= 5;
    int b= 3;
    int c;
     
    c = echange(a, b); // ici le compilateur accepte car echange() est de type int et non void. Pourtant ça ne veut rien dire. (et impossible de savoir ce qu'il y aura dans c après cet appel car aucun return dans la fonction echange() )


    Le deuxi�me type d'erreurs concerne comme tu l'as dit les pointeurs.

    �a fait beaucoup de choses, mais j'aimerai en relever rapidement certaines.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    int *a;
    int *b;
     
    // ou int *a, *b;
    Ces instructions d�finissent en effet 2 variables (avec leur propre adresse) de type "pointeur sur un int".

    N�anmoins sur quel int pointent-elles ? Aucun car tu ne les a pas initialis�es. Les adresses m�moire &a et &b existent (c'est l'adresse des pointeurs), mais leur contenu, leur valeur, est ind�termin� (c'est � dire l'adresse point�e n'est a priori pas valide).

    Jusque l� ce n'est pas un probl�me, tant que tu ne les utilises pas.

    Revoici le d�but de ton main() : (j'ai chang� la place de la partie sur les tableaux, on s'en occupera plus tard)

    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
    25
    26
    27
     
    int main ()
    {
        //par pointeur
        int* a;
        int* b;
        int x = 2;
        int y = 4;
     
        *a = x;
        *b = y;
     
        echange(*a, *b);
        cout << "a=" << a << " b=" << b << " ";
        &a = &x;
        &b = &y;
        echange(&a, &b);
        cout << "a=" << a << " b=" << b << " ";
        valeur::echange(a,b);
        cout << "a=" << a << " b=" << b << " ";  
     
        // j'ai mis les tableaux a la fin... car ils n'ont aucun lien avec le reste, pour la lisibilité :
           int *tabi;
        tabi = new int [5];
        saisirtab(tabi, 5);
        affichetab(tabi, 5);
    }

    Tu vois les lignes *a = x et *b = y ?

    Il y a un probl�me car tu n'as pas dit vers quoi pointaient a et b ! donc changer la valeur point�e est absurde : on ne sait pas ou l'ecrire. Cette instruction ne fait pas pointer a et b ailleurs, par ex. vers x ou y, ou une zone m�moire o� leur valeur serait �crite. Non.
    Cette instruction dit : Hey, tu sais, l� o� a et b pointent, il y a un des int, c'est �a ? et bien change la valeur qui se trouve l� bas par celle de x et de y.

    Le probl�me c'est que � ce niveau a et b ne sont pas initialis�s donc ne pointent pas vers grand chose. il faudrait au moins, avant cette instruction, faire a = new int; et b = new int; et v�rifier si a et b ne sont pas NULL (car allouer de la m�moire peut rater, s'il n'y en a plus assez pour le syst�me par exemple) avec un if(a==NULL) ... . Enfin bien sur c'est un "programme exemple pour comprendre", donc je comprend que tu ne l'ai pas fait.


    Et pourquoi est-ce que je voulais parler de cette erreur avant tout ?

    D'une part c'est la premi�re dans l'ordre du main(), et surtout car elle NE FAIT PAS partie des erreurs que le compilateur remarque � premi�re vue. Elle pourrait donner un warning, mais la syntaxe *a = x; est JUSTE, donc compile. Le probl�me est "logique" comme on dit : �a ne fera pas ce que tu voulais faire. (� moins que tu voulais faire crasher ton programme, voire peut-�tre ton OS bien sur )

    Voila, ensuite je laisse le soin � d'autres (ou moi, mais pas maintenant ) d'expliquer les prochaines erreurs (il y en a pas mal), ou � toi de nous expliquer les points pr�cis qui te posent probl�me. N'h�site pas � faire un tour dans la FAQ C++ et C pour les pointeurs / r�f�rences.

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    226
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 226
    Par d�faut
    Merci grace a tes explication plus des recherches j'ai r�ussi a r�soudre mon souci j'ai en effet mis des void a mes fonctions et j'ai allou� le contenu de a et b directement

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    3
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 3
    Par d�faut Incompr�hension
    Bonjour � tous, je suis d�butant en C++
    j'ai d�j� pas de base en C, mais compte tenue de mon programme acad�mique je suis contraint de bosser avec le C++.
    j'ai des cours dessus mais le probl�me que je rencontre actuellement est:
    ---apr�s ma compilation et que je lance mon ex�cution , je ne vois rien � l'�cran juste que la fen�tre de mon �diteur s'abaisse et se r�affiche, mais je ne vois rien au programme.
    -- et quelqu'un pourrait m'expliquer clairement � quoi sert le return ainsi que ses diff�rentes valeurs possible?
    Merci d'avance

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    1. Sans doute un probl�me li� � ton �diteur. Lequel utilises-tu ?
    2. Pareil qu'en C.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probleme de d�butant
    Par Oxygan dans le forum D�buter
    R�ponses: 4
    Dernier message: 18/05/2007, 10h13
  2. Probleme Flash + D�butant
    Par ganjaaw dans le forum Flash
    R�ponses: 2
    Dernier message: 25/04/2007, 20h55
  3. probleme de d�butant
    Par hachdotnet dans le forum ASP.NET
    R�ponses: 2
    Dernier message: 13/03/2007, 15h17
  4. un probleme de d�butant
    Par adel25 dans le forum MFC
    R�ponses: 7
    Dernier message: 27/07/2005, 01h08
  5. probleme de d�butant avec D3DXVECTOR3
    Par airseb dans le forum DirectX
    R�ponses: 6
    Dernier message: 16/08/2003, 21h03

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