none
un test d'un nulptr RRS feed

  • Question

  • bonjour;

    J'ai fait un test pour initialiser une variable

    							if( !pNewElemnt->Values[2].HasValue)
    								Value[2] = 0;
    							if( !pNewElemnt->Values[1].HasValue)
    								Value[1] = 0;
    							pNewObject->max = *Values[2];
    							pNewObject->min = *Values[1];
    							pNewObject->nValue = 2;
    							pNewObject->step = 1;
    							bIsProcessed = true;
    							pRefObject = pNewObject;
    

    J'ai donc repris le code en amont

                       pelementNormalized->pColors = pColor;
                       pelementNormalized->iEnumerated = pColor->Count;            // Ligne 855
                       pelementNormalized->TypeData = iMax;
                       pelementNormalized->type = (int)iType;
                       pelementNormalized->bIsEnumerated = true;
                       pelementNormalized->Values = (cli::array<Int32,1>^)*iiValue;
                       bIsProcessed = true;                                        // ligne 860
                   } // 4

    les nombreuses erreur portent sur des séquences diverses

    		                        plistQualificateurNormalized = StoreQualificateur( plistQualificateurNormalized, pListWord, Occurence, iOldEnreg, iAlloc, pPrevEnreg, pelementNormalized, pColor, wsPredicat, wsVerb, wsSujet, wsComplement, wsDeclencheur, wsText, wsIdentifier, wsCandidatIdentifier, iPos, iType, iiValue, u, v);
    					for each( QualificateurNormalizedM^ pelementNoramlized in plistQualificateurNormalized)
    					{ // 4
    						wsText = pelementNormalized->Comment;
    					} // 4
    

    et aussi

     } // 2
            // List<predicatNormalized*>* BuildComponents::StorePredicat( List<predicatNormalized*>* plistpredicatNormalized, int& Occurence, int& iOldEnreg, int& iAlloc, ElementSemantic* pEnreg, predicatNormalized* pelementNormalized, System::String^ wsDefinition, System::String^ wsPredicat, System::String^ wsVerb, System::String^ wsSujet, System::String^ wsComplement, System::String^ wsDeclencheur, System::String^ wsText, System::String^ wsIdentifier, System::String^ wsCandidatIdentifier, int& iPos, int& iType, int* iiValue)
    		pListPredicatNormalized = StoreProposition( pListPredicatNormalized, Occurence, iOldEnreg, iAlloc, pEnreg, pelementNormalized, pListWord, wsDefinition, wsPredicat, wsVerb, wsSujet, wsComplement, wsDeclencheur, wsText, wsIdentifier, wsCandidatIdentifier, iPos, iType, *iiValue, u ,v);
            
    		return( pListPredicatNormalized);
    mais ce test génère beaucoup de messages du compilateur:
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(859): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(859): error C2440: 'cast de type' : impossible de convertir de 'std::tr1::array<_Ty,_Size>' en 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(864): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(864): error C2440: 'cast de type' : impossible de convertir de 'std::tr1::array<_Ty,_Size>' en 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(902): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(902): error C2440: '=' : impossible de convertir de 'std::tr1::array<_Ty,_Size>' en 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(930): error C2511: 'System::Collections::Generic::List<T> ^SpecificationChecker::BuildComponents::StoreProposition(System::Collections::Generic::List<T> ^,System::Int32 ^,int %,int %,SpecificationChecker::ElementSemanticM ^,SpecificationChecker::PropositionNormalizedM ^,System::Collections::Generic::List<SpecificationChecker::CAnalysedWordM ^> ^,System::String ^%,System::String ^%,System::String ^%,System::String ^%,System::String ^%,System::String ^%,System::String ^%,System::String ^%,System::String ^%,enPOSM %,System::Int32 ^,cli::array<Type,dimension> ^,int %,int %)' : impossible de trouver la fonction membre surchargée dans 'SpecificationChecker::BuildComponents'
    1>          with
    1>          [
    1>              T=SpecificationChecker::PropositionNormalizedM ^,
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          D:\usr\SpecificationChecker\dev\Linguistic\Coherence\com\BuildComponents.h(29) : voir la déclaration de 'SpecificationChecker::BuildComponents'
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1153): warning C4800: 'int' : valeur forcée à la valeur booléenne 'true' ou 'false' (avertissement sur les performances)
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1154): warning C4806: '!=' : opération risquée : aucune valeur de type 'bool' promue en type 'int' ne peut être égale à la constante donnée
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1481): warning C4800: 'int' : valeur forcée à la valeur booléenne 'true' ou 'false' (avertissement sur les performances)
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1482): warning C4806: '!=' : opération risquée : aucune valeur de type 'bool' promue en type 'int' ne peut être égale à la constante donnée
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1809): error C2664: 'SpecificationChecker::BuildComponents::StoreQualificateur' : impossible de convertir le paramètre 19 de 'cli::array<Type,dimension> ^' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1902): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1902): error C2664: 'SpecificationChecker::BuildComponents::StoreQualificateur' : impossible de convertir le paramètre 19 de 'cli::array<Type,dimension> ^' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2022): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2022): error C2664: 'SpecificationChecker::BuildComponents::StoreProposition' : impossible de convertir le paramètre 19 de 'cli::array<Type,dimension> ^' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2101): error C2664: 'SpecificationChecker::BuildComponents::StoreProposition' : impossible de convertir le paramètre 19 de 'cli::array<Type,dimension> ^' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\array(212): error C2728: 'System::Nullable<T>' : un tableau natif ne peut pas contenir ce type managé
    1>          with
    1>          [
    1>              T=int
    1>          ]
    1>          Voulez-vous utiliser 'array<System::Nullable<T>>' ?
    1>          with
    1>          [
    1>              T=int
    1>          ]
    1>          ..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2160) : voir la référence à l'instanciation de la classe modèle 'std::tr1::array<_Ty,_Size>' en cours de compilation
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2174): error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'cli::array<Type,dimension> ^' (ou il n'existe pas de conversion acceptable)
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\array(213): peut être 'std::tr1::array<_Ty,_Size> &std::tr1::array<_Ty,_Size>::operator =(const std::tr1::array<_Ty,_Size> &)'
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>          lors de la tentative de mise en correspondance de la liste des arguments '(std::tr1::array<_Ty,_Size>, cli::array<Type,dimension> ^)'
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2206): error C2664: 'SpecificationChecker::BuildComponents::StoreProposition' : impossible de convertir le paramètre 19 de 'std::tr1::array<_Ty,_Size>' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2265): error C2664: 'SpecificationChecker::BuildComponents::ProcessElementSemantic' : impossible de convertir le paramètre 13 de 'std::tr1::array<_Ty,_Size>' en 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2271): error C2664: 'SpecificationChecker::BuildComponents::StoreProposition' : impossible de convertir le paramètre 19 de 'std::tr1::array<_Ty,_Size>' en 'std::tr1::array<_Ty,_Size>'
    1>          with
    1>          [
    1>              _Ty=System::Nullable<int>,
    1>              _Size=1
    1>          ]
    1>          and
    1>          [
    1>              _Ty=int,
    1>              _Size=1
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2559): error C2039: 'HasValue' : n'est pas membre de 'System::Int32'
    1>          c:\program files (x86)\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : voir la déclaration de 'System::Int32'
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2560): error C2065: 'Value' : identificateur non déclaré
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2561): error C2039: 'HasValue' : n'est pas membre de 'System::Int32'
    1>          c:\program files (x86)\reference assemblies\microsoft\framework\.netframework\v4.0\mscorlib.dll : voir la déclaration de 'System::Int32'
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2562): error C2065: 'Value' : identificateur non déclaré
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2563): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2563): error C2440: '=' : impossible de convertir de 'System::Nullable<T>' en 'int'
    1>          with
    1>          [
    1>              T=int
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2564): error C2100: indirection non conforme
    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(2564): error C2440: '=' : impossible de convertir de 'System::Nullable<T>' en 'int'
    1>          with
    1>          [
    1>              T=int
    1>          ]
    1>          Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
    



    Jean Noël Martin

    jeudi 5 mai 2016 20:33

Réponses

  • Le problème n'est pas dans la déclaration, mais dans l'utilisation.

    Le cast n'est pas un machin magique ni un aide-mémoire pour un compilateur atteint d’Alzheimer.

    Les messages d'erreurs des premiers messages montrent que vous voulez mettre des ronds dans des carrés.

    Ma réponse, c'est de convertir ces ronds en carrés (vive la lime).

    Pouvez-vous m'indiquer quel constructeur de "cli::array<T,U>" vous êtes sensé appeler avec le code  de votre dernier message?


    Paul Bacelar, Ex - MVP VC++

    jeudi 12 mai 2016 08:36
    Modérateur

Toutes les réponses

  • Bonjour, Jean-Noël,

    Le thread suivant donne plus de précisions sur votre souci. Il contient aussi des conseils fort utiles:
    http://www.developpez.net/forums/d1583078/c-cpp/outils-c-cpp/visual-cpp/test-nullptr/

    Cordialement,
    Dimitar

    vendredi 6 mai 2016 20:29
  • bonjour;

    Si j'ai ouvert un tread sur ce forum, ce n'est pas pour être renvoyé dans le premier


    Jean Noël Martin

    samedi 7 mai 2016 11:08
  • Comme cela fait plus de 2 ans qu'on vous le dit et redit, ici, c'est pas une hotline.

    Si vous renvoyez vers un de vos anciens écrits est pertinent, et c'est le cas (enfin c'est plutôt les réponses de Médinoc qui sont pertinentes), on s'autorise à le faire.

    Si vous voulez une réponse "personnalisée", payez le support M$.


    Paul Bacelar, Ex - MVP VC++

    lundi 9 mai 2016 07:46
    Modérateur
  • La seule difficulté que j'ai sur ce sujet s'est comment déclarer les variables iValues et iiValue que j'ai déclarer comme des cli::array<int, 1>^ NomDeVariable(25)

    ce que le compilateur n'aime pas


    Jean Noël Martin



    mardi 10 mai 2016 05:02
  • Convertissez le contenu de vos variables pour être conforme au format attendu par le code les utilisant.

    Pas de cast à la con.


    Paul Bacelar, Ex - MVP VC++

    mardi 10 mai 2016 10:34
    Modérateur
  • Je ne comprend pas

    pour moi la déclaration d'une variable c'est un type puis un identifiant


    Jean Noël Martin


    mardi 10 mai 2016 16:11
  • la déclaration:

    		cli::array<int,1>^ iiValue(25);
    

    mais elle n'est pas aimée par le compilateur

    1>..\..\..\Linguistic\Coherence\src\BuildComponents.cpp(1956): error C2440: 'initialisation' : impossible de convertir de 'int' en 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              Type=int,
    1>              dimension=1
    1>          ]


    Jean Noël Martin

    mardi 10 mai 2016 21:05
  • Le problème n'est pas dans la déclaration, mais dans l'utilisation.

    Le cast n'est pas un machin magique ni un aide-mémoire pour un compilateur atteint d’Alzheimer.

    Les messages d'erreurs des premiers messages montrent que vous voulez mettre des ronds dans des carrés.

    Ma réponse, c'est de convertir ces ronds en carrés (vive la lime).

    Pouvez-vous m'indiquer quel constructeur de "cli::array<T,U>" vous êtes sensé appeler avec le code  de votre dernier message?


    Paul Bacelar, Ex - MVP VC++

    jeudi 12 mai 2016 08:36
    Modérateur
  • la solution est

    auto iiValue = gcnew cli::array<int, 1>(25);


    Jean Noël Martin

    mardi 17 mai 2016 06:35