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

Visual C++ Discussion :

[tuto VS6.0 -> 2005] entete istream(.h)


Sujet :

Visual C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut [tuto VS6.0 -> 2005] entete istream(.h)
    Bonjour à tous,

    Je veut passer des projets de visual 6.0 à 2005
    Voila j'ai recuperer le tuto de Farscape:
    "Migrations de codes MFC de Visual 6.0 ou .net vers Visual studio 2005."

    Et je me trouve dans le cas 2.3.5:
    avant j'avais ceci sous visual 6.0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <iostream.h>
    #include <fstream.h>
    /*
    /* Du code
    /*
     
    // Dans une fonction:
    fstream in(bstrname, ios::in | ios::binary);
     
    /*
    /* Du code
    /*

    Maintenant j'ai mis ceci sous 2005
    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
     
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    /*
    /* Du code
    /*
     
    // Dans une fonction:
    fstream in(bstrname, ios::in | ios::binary);
    // Ici ca compile pas
     
    /*
    /* Du code
    /*
    J'obtiens ce message d'erreur:
    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
     
    error C2668: 'std::basic_fstream<_Elem,_Traits>::basic_fstream' : ambiguous call to overloaded function
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\program files\microsoft visual studio 8\vc\include\fstream(844): could be 'std::basic_fstream<_Elem,_Traits>::basic_fstream(const wchar_t *,std::ios_base::openmode,int)'
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\program files\microsoft visual studio 8\vc\include\fstream(835): or 	'std::basic_fstream<_Elem,_Traits>::basic_fstream(const char *,std::ios_base::openmode,int)'
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            while trying to match the argument list '(bstr, int)'
    Donc je vois bien que c'est un probleme de cast, mais je vois pas comment le regler, d'ailleurs je comprend meme pas qu'il y ait deux fois la meme fonction dans le meme fichier.
    Si vous pouvez m'eclairer.

    Merci

  2. #2
    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
    salut,
    apparement ton projet sous 2005 doit etre configuré en UNICODE d'ou l'erreur.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Apparemment, bstrname possède deux opérateurs de conversion, l'un en char const *, l'autre en wchar_t const *.
    Et comme le constructeur de fstream admet les deux types...

    Tu peux forcer comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fstream in(static_cast< char const * >(bstrname), ios::in | ios::binary);
    ou bien sans cast avec une variable intermédiaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char const *sName = bstrname;
    fstream in(sName, ios::in | ios::binary);
    Note: je n'ai pas testé...
    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.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Bonjour,
    Cool la 2eme methode de Medinoc marche nickel.
    Merci parce que j'etais bloquer.
    En fait je pensai que ca venait de "ios::" j'etais carrement a cote du probleme lol.

    Par contre Farscape, ca m'interesse:
    en fait ce ne sont pas mes projets, on m'a demander de passer a 2005 et du coup j'oserai demander si possible comment faire pour gerer l'UNICODE.
    Je sais que ca concerne le codage de caractere mais j'avoue que je sais pas ou ca se configure sous 2005(ni sous 6.0) enfin je vais chercher dans les settings, mais si tu peut me preciser un peu l'histoire .


    Et aussi je veut pas abuser mais en fait j'avais d'autre probleme.
    C'est toujours avec la modif de <istream.h> en <istream>
    Voici mon code:
    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
     
    // new state
    try
    {
    /*
      Code
    */
    }
    catch(::exception) // ligne xxx1
    {
    /*
      Code
    */
    }
    // ligne xxx2
    Les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ligne xxx1 : error C2039: 'exception' : is not a member of '`global namespace''
    ligne xxx1 : error C2061: syntax error : identifier 'exception'
    ligne xxx1 : error C2310: catch handlers must specify one type
    ligne xxx2 : error C2317: 'try' block starting on line '416' has no catch handlers
    Apparament ca viendrai du "using namespace std;" mais je sais pas comment ca marche. Est-ce que je doit en inclure un autre?

    Et aussi:
    toujours apres l'histoire des istream, les erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    warning C4996: '_osver' was declared deprecated
    Alors apparement cette variable est declarer dans stdlib.h, c'est juste un warning j'aimerai bien l'enlever.
    J'ai fait auparavant la manip d'ajouter le flag:
    _CRT_SECURE_NO_DEPRECATE
    Mais ca vient pas de la.

    Dans l'aide il parle des flag:
    C4996 can also occur if you use MFC or ATL functions that were deprecated for security reasons. To suppress these warnings, see _AFX_SECURE_NO_DEPRECATE and _ATL_SECURE_NO_DEPRECATE.
    J'ai regarde mais j'ai pas reussi.

    Voila voila...
    si vous savez comment faire

    Merci

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    la classe exception a été intégrée au namespace std.
    ---> catch(exception) ou catch(std::exception)
    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.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646
    Par défaut
    Je suis un super boulet!!!
    En fait j'avais deja tester, je me doutai que c'etait un truc de ce genre. Sauf que je continuai d'avoir l'erreur--> mais en fait l'erreur concernait un autre fichier donc ca corrigeait bien mais je m'en suis pas aperçu je suis a cote de mes pompes aujourd'hui.
    Enfin heureusement que tu m'as dit ca sinon j'aurai pas retester

    Bon il me reste plus que les deprecated: m'en vais voir la doc j'ai surement encore louper un truc.

    Danke!
    A+

Discussions similaires

  1. Tuto MS SQL Server 2005 Express
    Par naphta dans le forum Sondages et Débats
    Réponses: 2
    Dernier message: 28/02/2008, 18h15
  2. Réponses: 1
    Dernier message: 09/10/2007, 16h45
  3. VisualStudio C++ 2005 : generation auto des entetes
    Par gabule dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 09/03/2007, 17h19
  4. VS6.0 - reduction des fonctions comme dans le 2003 et 2005
    Par squale32 dans le forum Visual C++
    Réponses: 7
    Dernier message: 23/02/2007, 15h38

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