• [^] # Re: RE

    Posté par . En réponse au message Compilation C++. Évalué à 4.

    copier-coller malheureux :

    cout << "Numero = "; cin >> num; endl;
    cout << "Date = "; cin >> date; endl;
    cout << "Destination = "; cin >> destination; endl;
    cout << "Prix = "; cin >> prix; endl;

    Les endl sont inutiles ici. Tu n'écris pas dans le stream.

    cout << "Numero = "; num; endl;
    cout << "Date = "; date; endl;
    cout << "Destination = "; destination; endl;
    cout << "Prix = "; prix ; endl;

    Ici tu devrais avoir des inserters "<<" et pas des point-virgules ! Un peu d'attention :-) Note bien que cela ne plante pas car "endl" est en fait une fonction, et que "ostream::operator <<" est déjà surchargé pour la reconnaitre.

    Tu peux très bien invoquer, en C et en C++, le symbole d'une fonction sans les parenthèses, car c'est un symbole à part entière qui représente quelque chose de bien défini: une fonction. Le symbole prend donc comme valeur l'adresse en mémoire du code de cette fonction (c'est donc un pointeur de fonction).

    Or, tu peux très bien mettre une expression qui retourne (éventuellement) une valeur sur une ligne, clotûrée par un ";". Exemples:

    5;
    cos(1);
    8+7;
    printf("Bonjour");

    Les fonctions sont des expressions au même titre que 5 ou 8+7, et qui ont une valeur. Le C/C++ appelle le code de ces fonctions pour les évaluer, et implémente de cette manière le système de sous-programme. C'est ce qui permet à printf("") de faire une action (écrire à l'écran) lorsqu'elle est évaluée.

    Or, endl est une fonction, mais surchargée, ce qui veut dire qu'il existe plusieurs versions de endl. Associé à un stream, il n'y a pas d'ambigüité, mais hors-contexte, le C++ ne sait pas laquelle choisir. D'où l'erreur !

    Ton code était donc complètement incorrect ... mais légal ! :-)

    Bienvenue dans le monde merveilleux du C++. Quand tu auras appris à en maîtriser toutes les subtilités, la puissance sera entre tes mains (personnellement, je ne code plus qu'en ASM/C/C++, avec accessoirement un peu de Shell).

    Bon courage.