none
je tourne en rond sur une définition RRS feed

  • Question

  • Je suis parti de :

    	ref class CVirtualEquations
    	{
    	public:
    		CVirtualEquations::CVirtualEquations();
    		CVirtualEquations::~CVirtualEquations();
    		static erc CVirtualEquations::ProcessVirtualEquations( CAnalysedSegment^ pSegment);
    		static erc CVirtualEquations::CheckVirtualEquations( List<CAnalysedSegment^>^ pListSegment);
    	};
    
    	public ref class CLinguisticSegmentM
    	{
    	public:
    		System::Collections::Generic::List<CAnalysedWordM^>^  pListWord;                 //  Liste de pointeurs sur les Mots qui constituent le Segment
    		System::Collections::Generic::List<CElementSemantiqueM^>^ pListProposition;      //  Liste de pointeurs sur les Ngrams qui sont dans le Segment
    		System::Collections::Generic::List<CAnalysedChunkM^>^ pListChunk;                //  Liste de pointeurs sur les Chunks qui sont dans le Segment
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPredicat;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPrecondition;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListQualificatif;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListUnivers;
    		System::Collections::Generic::List<CVirtualEquations> pListEquations;
    		System::Collections::Generic::List<QualificateurNormalizedM^>^ plistQualificateurNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPredicatNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPreconditionNormalized;
    		System::Collections::Generic::List<CObjetM^>^ plistObjectsNormalized;
    
    		CLinguisticSegmentM()
    		  {;}
    		~CLinguisticSegmentM()
    		  {;}
    	};
    
    	public ref class CAnalysedSegmentM
    	{
    	public:
    		unsigned long long          ullSegmentID;             //  Identifiant du Segment dans la base de données
    		CLinguisticSegmentM^        pLinguisticSegment;       //  Segment decomposition
    		CLayoutM^					pSegmentLayout;           //  Segment layout at the segment level only
    		short                       shSegmentCharLength;      //  Number of character in sentence
    		short                       shSegmentWordLength;      //  Number of words in sentence
    		enLanguageM                 Language;                 //  Langue du segment
    		unsigned long               ulDocPosition;            //  Segment position into the Document
    
    		CAnalysedSegmentM::CAnalysedSegmentM()
    		{
    				;
    		};
    		CAnalysedSegmentM::~CAnalysedSegmentM()
    		{
    				;
    		};
    	};

    Évidement il ne trouvait pas la référence à CAnalysedSegmentM défini plus tard

    j'ai donc essayé de le typer en void*

    	ref class CVirtualEquations
    	{
    	public:
    		CVirtualEquations::CVirtualEquations();
    		CVirtualEquations::~CVirtualEquations();
    		static erc CVirtualEquations::ProcessVirtualEquations( void* pSegment);
    		static erc CVirtualEquations::CheckVirtualEquations( List<void*>^ pListSegment);
    	};
    

    et il me dit :

    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(349): error C3225: l'argument de type générique de 'T' ne peut pas être 'void *', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): warning C4677: 'pListEquations' : la signature de membre non privée contient un type privé d'assembly 'SpecificationLoader::CVirtualEquations'
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(344) : voir la déclaration de 'SpecificationLoader::CVirtualEquations'
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362) : voir la référence à l'instanciation de la classe Générique 'System::Collections::Generic::List<T>' en cours de compilation
    1>          with
    1>          [
    1>              T=SpecificationLoader::CVirtualEquations
    1>          ]
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362) : voir la référence à l'instanciation de la classe Générique 'System::Collections::Generic::IList<T>' en cours de compilation
    1>          with
    1>          [
    1>              T=SpecificationLoader::CVirtualEquations
    1>          ]
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362) : voir la référence à l'instanciation de la classe Générique 'System::Collections::Generic::ICollection<T>' en cours de compilation
    1>          with
    1>          [
    1>              T=SpecificationLoader::CVirtualEquations
    1>          ]
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(362) : voir la référence à l'instanciation de la classe Générique 'System::Collections::Generic::IEnumerable<T>' en cours de compilation
    1>          with
    1>          [
    1>              T=SpecificationLoader::CVirtualEquations
    1>          ]


    Jean Noël Martin

    mardi 21 juillet 2015 10:03

Réponses

  • la solution est ci dessous

    	ref class CVirtualEquations;
    		
    	public ref class CLinguisticSegmentM
    	{
    	public:
    		System::Collections::Generic::List<CAnalysedWordM^>^  pListWord;                 //  Liste de pointeurs sur les Mots qui constituent le Segment
    		System::Collections::Generic::List<CElementSemantiqueM^>^ pListProposition;      //  Liste de pointeurs sur les Ngrams qui sont dans le Segment
    		System::Collections::Generic::List<CAnalysedChunkM^>^ pListChunk;                //  Liste de pointeurs sur les Chunks qui sont dans le Segment
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPredicat;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPrecondition;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListQualificatif;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListUnivers;
    		System::Collections::Generic::List<CVirtualEquations^> pListEquations;
    		System::Collections::Generic::List<QualificateurNormalizedM^>^ plistQualificateurNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPredicatNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPreconditionNormalized;
    		System::Collections::Generic::List<CObjetM^>^ plistObjectsNormalized;
    
    		CLinguisticSegmentM()
    		  {;}
    		~CLinguisticSegmentM()
    		  {;}
    	};


    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mardi 21 juillet 2015 17:38
    mardi 21 juillet 2015 17:37

Toutes les réponses

  • >j'ai donc essayé de le typer en void*

    WTF !!!

    Le C++ est un langage fortement typé, on n'est plus en 70 à faire un UNIX en mi assembleur mi C pré-historique.

    Le C++/CLI, c'est du C++, faites une forward déclaration de "CAnalysedSegmentM", et des autres.

    ref class CAnalysedSegment;
    
    ref class CVirtualEquations
    {
    public:
    	CVirtualEquations();
    	~CVirtualEquations();
    	static ProcessVirtualEquations( CAnalysedSegment^ pSegment);
    	CheckVirtualEquations( List<CAnalysedSegment^>^ pListSegment);
    };
    
    ...
    


    Paul Bacelar, Ex - MVP VC++

    mardi 21 juillet 2015 12:18
    Modérateur
  • oui mais comment faire si le symbole est défini après

    Jean Noël Martin

    mardi 21 juillet 2015 14:29
  • C'est une forward déclaration !!!

    Il FAUT donc que la "vraie" déclaration de la classe existe, ailleurs.

    Si vous ne voyez pas ce qu'est une forward déclaration, révisez vos cours de C ou de C++.


    Paul Bacelar, Ex - MVP VC++

    mardi 21 juillet 2015 15:06
    Modérateur
  • pouvez vous vous me donnez un lien pour que j'apprenne ce qu'est une forward déclaration

    j'ai codé sur la base du  lien:

    	ref class CAnalyzedSegment;
    	ref class CVirtualEquations;
    		
    	public ref class CLinguisticSegmentM
    	{
    	public:
    		System::Collections::Generic::List<CAnalysedWordM^>^  pListWord;                 //  Liste de pointeurs sur les Mots qui constituent le Segment
    		System::Collections::Generic::List<CElementSemantiqueM^>^ pListProposition;      //  Liste de pointeurs sur les Ngrams qui sont dans le Segment
    		System::Collections::Generic::List<CAnalysedChunkM^>^ pListChunk;                //  Liste de pointeurs sur les Chunks qui sont dans le Segment
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPredicat;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPrecondition;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListQualificatif;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListUnivers;
    		System::Collections::Generic::List<CVirtualEquations> pListEquations;
    		System::Collections::Generic::List<QualificateurNormalizedM^>^ plistQualificateurNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPredicatNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPreconditionNormalized;
    		System::Collections::Generic::List<CObjetM^>^ plistObjectsNormalized;
    
    		CLinguisticSegmentM()
    		  {;}
    		~CLinguisticSegmentM()
    		  {;}
    	};
    
    	public ref class CAnalysedSegmentM
    	{
    	public:
    		unsigned long long          ullSegmentID;             //  Identifiant du Segment dans la base de données
    		CLinguisticSegmentM^        pLinguisticSegment;       //  Segment decomposition
    		CLayoutM^					pSegmentLayout;           //  Segment layout at the segment level only
    		short                       shSegmentCharLength;      //  Number of character in sentence
    		short                       shSegmentWordLength;      //  Number of words in sentence
    		enLanguageM                 Language;                 //  Langue du segment
    		unsigned long               ulDocPosition;            //  Segment position into the Document
    
    		CAnalysedSegmentM::CAnalysedSegmentM()
    		{
    				;
    		};
    		CAnalysedSegmentM::~CAnalysedSegmentM()
    		{
    				;
    		};
    	};

    mais le compilateur me refuse la déclaration de CVirtualEquations

    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(356): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(356): error C3225: l'argument de type générique de 'T' ne peut pas être 'SpecificationLoader::CVirtualEquations', il doit s'agir d'un type valeur ou d'un handle d'un type référence
    1>          D:\usr\Specification LoaderV4.1\dev\Common\com\ClasseAlignerManaged.hpp(356) : voir la référence à l'instanciation de la classe Générique 'System::Collections::Generic::List<T>' en cours de compilation
    1>          with
    1>          [
    1>              T=SpecificationLoader::CVirtualEquations
    1>          ]
    pourtant pour moi quand j'écrit ref je définit une reference; J'ai fini par trouver, il fallait un ^


    Jean Noël Martin




    mardi 21 juillet 2015 16:23
  • la solution est ci dessous

    	ref class CVirtualEquations;
    		
    	public ref class CLinguisticSegmentM
    	{
    	public:
    		System::Collections::Generic::List<CAnalysedWordM^>^  pListWord;                 //  Liste de pointeurs sur les Mots qui constituent le Segment
    		System::Collections::Generic::List<CElementSemantiqueM^>^ pListProposition;      //  Liste de pointeurs sur les Ngrams qui sont dans le Segment
    		System::Collections::Generic::List<CAnalysedChunkM^>^ pListChunk;                //  Liste de pointeurs sur les Chunks qui sont dans le Segment
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPredicat;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListPrecondition;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListQualificatif;
    		System::Collections::Generic::List<ElementSemanticM^>^ pListUnivers;
    		System::Collections::Generic::List<CVirtualEquations^> pListEquations;
    		System::Collections::Generic::List<QualificateurNormalizedM^>^ plistQualificateurNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPredicatNormalized;
    		System::Collections::Generic::List<PropositionNormalizedM^>^ pListPreconditionNormalized;
    		System::Collections::Generic::List<CObjetM^>^ plistObjectsNormalized;
    
    		CLinguisticSegmentM()
    		  {;}
    		~CLinguisticSegmentM()
    		  {;}
    	};


    Jean Noël Martin

    • Marqué comme réponse JeanNoel53 mardi 21 juillet 2015 17:38
    mardi 21 juillet 2015 17:37