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 :

J'ai un problème de typage


Sujet :

Visual C++

  1. #1
    Débutant
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Localisation : France, Mayenne (Pays de la Loire)

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 022
    Points : 332
    Points
    332
    Par défaut J'ai un problème de typage
    bonjour
    J'ai un problème de typage : J'ai déclaré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		unsigned long ulStart = 0;
    		System::Int32^ pStatus;
    		bool bWasMoved = false;
    		bool bIsMoved = false;
    je veux allouer pStatus à un type CAnalysedWordM par l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pAnalysedWord->iExcluded = pStatus;
    mais j'ai un 1° message sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		pListAnalysedWord = gcnew List<CAnalysedWordM^>();
    qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1>..\..\..\..\Linguistic\ParserManager\src\ParserManager.cpp(702): error C2440: '='*: impossible de convertir de 'System::Collections::Generic::List<T> ^' en 'System::Collections::Generic::List<T> ^'
    1>          with
    1>          [
    1>              T=SpecificationLoader::CAnalysedWordM ^
    1>          ]
    1>          and
    1>          [
    1>              T=SpecificationLoader::stAnalysedWordM ^
    1>          ]
    1>          Aucun opérateur de conversion défini par l'utilisateur disponible, ou
    1>          Les types pointés n'ont aucun rapport entre eux*; conversion nécessitant reinterpret_cast, cast de style C ou cast de style fonction
    CAnalysedWordM est défini par
    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
    	public ref class CAnalysedWordM
    	{
    	public:
    		unsigned long long          ullWordID;               //  Identifiant du Word dans la base de données
    		unsigned long long          ullLemmaID;              //  Identifiant du Lemma dans la base de données
    		System::String^             wsWord;                   // Texte du mot
    		System::String^             wsLemma;                  // Texte du lemma
    		enPOSM                      POS;                      // Part Of Speech du lemma (et du mot)
    		enGenderM                   iGender;                  // Genre du lemma (et du mot)
    		enPersM                     iPers;                    // la Personne du mot
    		enNbrM                      iNbr;                     // le nombre du mot
    		System::String^             wsPronunciation;          // Prononciation du lemma (pour le japonais)
    		System::Int32^				iExcluded;                // La valeur du lemma est important ou non
    		int                         ValueOfWord;              // la valeur du mot pour l'alignement
    		unsigned long               ulStart;                  // Position du premier caractère du mot dans le segment
    		unsigned long               ulLength;                 // Longueur du mot (les espaces sont exclus)
    		int                         iWordOccurence;           // occurence du mot dans la BD
    		CAnalysedWordM()
    		{
    		}
    		~CAnalysedWordM()
    		{;}
    	};
    et l'allocation me sort un message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1>..\..\..\..\Linguistic\ParserManager\src\ParserManager.cpp(721): error C2440: '='*: impossible de convertir de 'System::Int32 ^' en 'int'
    1>          Aucun opérateur de conversion défini par l'utilisateur disponible, ou
    1>          Aucun contexte dans lequel cette conversion est possible
    celui qui m'orientera sera ;ccool:

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 157
    Points : 12 271
    Points
    12 271
    Par défaut
    Comme d'hab. toutes les réponses sont dans les messages d'erreurs.

    ParserManager.cpp(702): error C2440: '='*: impossible de convertir de
    Vous essayez de mettre une List<CAnalysedWordM ^> dans une List<stAnalysedWordM ^>.

    On n'est plus à la maternelle, faut pas essayer de mettre des ronds dans des carrés, ça marche pas.

    error C2440: '='*: impossible de convertir de 'System::Int32 ^' en 'int'
    Idem, un "int" non managé peut avoir 8 bits comme 128, être signé ou non, un Int32 est managé donc mobile en mémoire et en plus il a une taille défini, lui.
    La conversion implicite n'a donc pas de sens.
    Castez explicitement votre Int32 en (int) si vous assumez tout ce bordel.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Pourquoi utilises-tu un Int32 "mis en boîte" sur le tas managé (Int32^) au lieu de l'utiliser bêtement par valeur (Int32 tout court) ?
    Je n'en voie pas la raison.

    @bacelar: un int non-managé est toujours 32 bits sous Windows, et en C++-CLI il me semble que c'est exactement le même type que System::Int32, comme en C# (en gros, int est un alias vers System::Int32). Le problème vient du fait que Int32^ n'est pas la même chose que Int32.
    (et d'ailleurs, n'a pas d'équivalent en C# ou VB, où un objet d'un type valeur "boxed" ne peut pas avoir d'autre type statique que System::Object^)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/02/2007, 17h56
  2. problème de typage
    Par sissi25 dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 10/01/2007, 12h59
  3. [Typage] Problème avec typage de variables
    Par elitemedia dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2006, 02h18
  4. [Tableaux] Problème de typage sur un float
    Par Lomu dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 11h47
  5. [SQL2005] problèmes de typage de colonne en XML
    Par titouc330 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/10/2006, 12h52

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