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

MFC Discussion :

Visual C++6 exige-t-il des paramètres dans les prototypes ?


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut Visual C++6 exige-t-il des paramètres dans les prototypes ?
    Bonsoir.

    Le compilateur de Visual C++ 6 rejette le programme qui suit
    (Edit : si on n'indique pas le paramètre v dans le prototype), en objectant que le paramètre de la fonction afficherLaTaille n'est pas déclaré.
    Si onajoute le paramètre au prototype, tout va comme souhaité.

    Pourtant, il n'est pas obligatoire d'indiquer le paramètre dans un prototype (Stroustrup, Le langage C++, 2e éd. fr., p. 160).

    Quelqu'un en sait-il plus que moi là-dessus ? Merci d'avance pour la réponse.

    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
     
    // ParametreDansPrototypeTemplate.cpp
    // Illustre quelque chose qui me paraît anormal :
    // obligation de mettre un paramètre
    // dans le prototype d'une fonction "template".
     
    #include <iostream>
    using std::cout;
    using std::endl;
     
    #include <string>
    using std::string;
     
    #include <vector>
    // using std::vector; // Cet "using" est à ne pas utiliser,
    // d'après Deitel, p. 978.
     
     
    class myString
    {
    public:
      myString(const string & s = "") {laChaine = s;}
     
    private:
      string laChaine;
    };
     
     
    template<class T> void afficherLaTaille(std::vector<T> & v);
    // prototype.
    // Si on n'indique pas le paramètre dans le prototype,
    // le compilateur (Visual C++ 6)
    // objecte que le paramètre de la fonction
    // afficherLaTaille(std::vector<T> & v)
    // n'est pas défini.
     
     
    int main()
    {
      int TAILLE = 2; // par exemple
      std::vector<myString> w(TAILLE);
      w[0] = myString(string("a"));
      w[1] = myString(string("bc"));
     
      afficherLaTaille(w);
      return 0;
    }
     
    template<class T> void afficherLaTaille(std::vector<T> & v)
    {
      cout << v.size() << endl;
    }
    M.

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    template<class T> void afficherLaTaille(std::vector<T> & v);
    // prototype.
    // Si on n'indique pas le paramètre dans le prototype,
    // le compilateur (Visual C++ 6)
    // objecte que le paramètre de la fonction
    // afficherLaTaille(std::vector<T> & v)
    // n'est pas défini.
    pas sûr d'avoir compris ce que tu veux dire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut
    Citation Envoyé par bigboomshakala
    pas sûr d'avoir compris ce que tu veux dire
    Le paramètre v est indiqué dans le prototype (ou déclaration de fonction, si vous préférez), comme vous pouvez le voir. Sous cette forme, le programme fonctionne correctement.

    Or, l'indication des paramètres n'est pas obligatoire dans un prototype, l'indication du type de chaque paramètre suffit.
    (Voir la référence à Stroustrup que j'ai donnée.)

    Mais si on supprime le paramètre v dans le prototype, le compilateur prétend que, dans le corps de la fonction qui prend ce paramètre, ce paramètre n'est pas défini. Cela me semble anormal.

    Avez-vous essayé d'exécuter les deux versions du programme, avec et sans paramètre dans le prototype ?

    (En fait, je m'étais mal exprimé : le compilateur accepte la version que j'ai mise en ligne, qui est la version où le paramètre figure dans le prototype. En revanche, il refuse la version où le paramètre ne figure pas dans le prototype, alors que, selon Stroustrup, endroit cité, il devrait acceptet cette version aussi. Tel est le problème.)

    Cordialement,

    M.

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    C’est fort possible,
    mais il ne faut pas oublier que VC6 date de 1998 ....
    et que le support de la norme en ce qui concerne les templates n'est pas forcément au top...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 107
    Par défaut
    Citation Envoyé par farscape
    C’est fort possible,
    mais il ne faut pas oublier que VC6 date de 1998 ....
    et que le support de la norme en ce qui concerne les templates n'est pas forcément au top...
    Merci pour la réponse.

    J'ai l'impression que je ne suis vraiment plus à jour et je pense passer à une version plus récente.

    Quelqu'un peut-il me dire si la dernière version de Visual C++
    fait lever une exception de classe bad_alloc quand new échoue ?
    La norme le prévoit depuis longtemps, je crois.

    Merci d'avance.

  6. #6
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    J'ai bien l'impression que, contrairement à la stl, la mfc ne respecte toujours pas cette norme:
    http://support.microsoft.com/default...7733#appliesto

    A vérifier.

Discussions similaires

  1. Nouveautés 2010 en vidéo - des paramètres dans les macros
    Par Maxence HUBICHE dans le forum Access
    Réponses: 6
    Dernier message: 16/01/2010, 12h05
  2. Modifier des paramètres dans un calque
    Par mohamed2006 dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 11/12/2006, 09h22
  3. Réponses: 10
    Dernier message: 13/09/2006, 09h13
  4. Réponses: 1
    Dernier message: 21/03/2006, 14h29

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