locked
une instabilité du compilateur RRS feed

  • Question

  • bonjour,

    Je suis confronté à deux instabilités du compilateur ; J'ai deux classes de dictionnaire

    chaque classe sort une erreur, mais ce n'est pas la même:

    je vous donne le code des deux classes et les messages d'erreur de chaque classe:

    la classe TempDict:

    	SensTemporary::SensTemporary() {}
    	SensTemporary::~SensTemporary() {}
    	static Int32 LastID;
    //------------------------------------------------------------------------------ ligne 37
    	mySynset^ SensTemporary::getSens( System::Int32 id)
        {
    		return senstemp[id]->second;                                                       //ligne 42
    	}
    //------------------------------------------------------------------------------ ligne 44    
    	void SensTemporary::remove( System::Int32 id)
        {
             senstemp[id]->Clear( senstemp, id, 1);;
        }
        void SensTemporary::updateSens( System::Int32 id, mySynset^ pSynset)
        {
            senstemp[ id]->second = pSynset;
        }
    
        bool SensTemporary::isExist(System::Int32 id)
        {
            int i;
            i = senstemp->Length;
    		if( i > 0)
            {
    			return true;
    		}
    		else
            {
    			return false;
    		}
    	}
    
    	bool SensTemporary::addSens( System::Int32 id, mySynset^ pSynset)
        {
    		senstemp[LastID] = gcnew Microsoft::VisualC::StlClr::GenericPair< System::Int32, SpecificationLoader::mySynset^>;
    		senstemp[LastID]->first = LastID;
    		senstemp[LastID]->second = pSynset;
    		LastID++;
    		return true;
    	}

    provoque le message d'erreur suivant:

    1>  DictTemp.cpp
    1>DictTemp.cpp(47): error C2039: 'Clear' : n'est pas membre de 'Microsoft::VisualC::StlClr::GenericPair<TValue1,TValue2>'
    1>          with
    1>          [
    1>              TValue1=int,
    1>              TValue2=SpecificationLoader::mySynset ^
    1>          ]
    

    alors que le fichier dictionnaire donne un autre message

    //----------- METHOD IMPLEMENTATION OF SensDictionnary Class -------------------
    
    	SensDictionnary::SensDictionnary() {}
    	SensDictionnary::~SensDictionnary() {}
    
    	static Int32 LastID;
    //------------------------------------------------------------------------------ ligne 43
    	bool SensDictionnary::isKnown( System::String^ word)
    	{
    		mySynset^ temp;
    		Int32 id;
    		for( id = 0; id <= LastID; id++)
    			if(sens[id]->first == word)
    				break;
    		temp = sens[id]->second;
    		return temp->Word->IndexOf( word) == -1;
    	}
    
    
    	SensDictionnary::SensDictionnary( char* FileName)
    	{
    		const wchar_t* str = CStrConv::ambstowcs( FileName);
    		FILE* InFile = CWfStream::open( (const wchar_t*)str, L"r+", 666);
    		CStrConv::StrFreeW( (wchar_t*)str);
    		System::String^ wsText = this->toString();
    		CWfStream::getline( InFile, wsText);
    		CWfStream::close();
    	}
    
    //------------------------------------------------------------------------------ ligne 67
    	int SensDictionnary::SaveSens( char *filename)
    	{
    		const wchar_t* str = CStrConv::ambstowcs( filename);
    		FILE* OutFile = CWfStream::open( (const wchar_t*)str, L"r+", 666);
    		CStrConv::StrFreeW( (wchar_t*)str);
    		if( OutFile != nullptr)	
    		{		
    			System::String^ wsText = this->ToString();
    			CWfStream::writeline( OutFile, wsText);
    			return( 0);
    		}
    		else
    			return( -1);
    	}
    
    //------------------------------------------------------------------------------  ligne 83
    	mySynset^ SensDictionnary::getSens( System::String^ word)
    	{
    		mySynset^ temp;
    		Int32 id;
    		for( id = 0; id <= LastID; id++)
    			if(sens[id]->first == word)
    				break;
    		temp = sens[id]->second;
    		return temp;
    	}
    //------------------------------------------------------------------------------ ligne 93
    	bool SensDictionnary::addSens( System::String^ word, mySynset^ pSynset)
    	{
    		sens[LastID] = gcnew Microsoft::VisualC::StlClr::GenericPair< System::Int32, SpecificationLoader::mySynset^>;
    		sens[LastID]->first = word;
    		sens[LastID]->second = pSynset;
    		LastID ++;
    		return true;
    	}
    //------------------------------------------------------------------------------ ligne 102
    	void SensDictionnary::remove( System::String^ word)
    	{
    		Int32 id;
    		if( sens->Length > 0)
    		{
    			for( id = 0; id <= LastID; id++)
    				if(sens[id]->first == word)
    					break;
    			sens[id]->Clear( sens, id, 1);
    		}
    	}
    //------------------------------------------------------------------------------ ligne 114
    	void SensDictionnary::updateSens( System::String^ word, mySynset^ pSynset)
    	{
    		Int32 id;
    		for( id = 0; id <= LastID; id++)
    			if(sens[id]->first == word)
    				break;
    		sens[id]->second = pSynset;
    	}
    
    	System::String^ SensDictionnary::toString()
    	{
    		System::String^ str;
    		Microsoft::VisualC::StlClr::GenericPair<System::String^, mySynset^>^ el;
    
    		for each( el in sens)
    		{
    			str = el->first;
    			str += "\t";
    			str += el->second->Number;
    			str += "\t";
    			str += el->second->Frequence;
    			str += "\t";
    			str += el->second->Identifier;
    			str += "\t";
    			str += el->second->pos;
    			str += "\t";
    			str += el->second->Value;
    			str += "\t";
    			str += el->second->Word;
    			str += "\t";
    			str += el->second->Definition;
    			str += "\n" ;
    		}
    		return( str);
    	}
    	
    //------------------------------------------------------------------------------ ligne 151
    	System::String^ SensDictionnary::keyListString()
    	{
    		System::String^ str;
    		Microsoft::VisualC::StlClr::GenericPair<System::String^, mySynset^>^ el;
    
    		for each( el in sens)
    		{
    			str += L"'";
    			str += el->first;
    			str += L"' ";
    		}
    		return str;
    	}
    et le message est:
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(96): error C2440: '=' : impossible de convertir de 'Microsoft::VisualC::StlClr::GenericPair<TValue1,TValue2> ^' en 'Microsoft::VisualC::StlClr::GenericPair<TValue1,TValue2> ^'
    1>          with
    1>          [
    1>              TValue1=int,
    1>              TValue2=SpecificationLoader::mySynset ^
    1>          ]
    1>          and
    1>          [
    1>              TValue1=System::String ^,
    1>              TValue2=SpecificationLoader::mySynset ^
    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
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(111): error C2039: 'Clear' : n'est pas membre de 'Microsoft::VisualC::StlClr::GenericPair<TValue1,TValue2>'
    1>          with
    1>          [
    1>              TValue1=System::String ^,
    1>              TValue2=SpecificationLoader::mySynset ^
    1>          ]


    Jean Noël Martin

    mardi 15 septembre 2015 10:44

Réponses

  • Vous avez 2 "codes" complètement différents, je ne vois pas pourquoi vous devriez avoir 2 fois le même message d'erreurs, vu que c'est 2 erreurs complètement différentes.

    L'instabilité, elle est pas dans le compilateur, très très loin de là.

    Les messages d'erreurs sont des plus explicites !!!

    "Clear" n'est pas une méthode du type d'élément contenu dans senstemp. (Oui, c'est un peu du Captain Obvious, cf. messages d'erreurs explicites.)

    Une map<int, truc> contient des éléments qu'on ne peut pas insérer dans une map<string,truc> (Oui, CaptainObvious aussi)

    sens[LastID] = gcnew Microsoft::VisualC::StlClr::GenericPair< System::String, SpecificationLoader::mySynset^>;


    Paul Bacelar, Ex - MVP VC++

    mardi 15 septembre 2015 12:28
    Modérateur

Toutes les réponses

  • on verra si ça persiste avec le traitement des List

    Jean Noël Martin

    mardi 15 septembre 2015 12:09
  • Vous avez 2 "codes" complètement différents, je ne vois pas pourquoi vous devriez avoir 2 fois le même message d'erreurs, vu que c'est 2 erreurs complètement différentes.

    L'instabilité, elle est pas dans le compilateur, très très loin de là.

    Les messages d'erreurs sont des plus explicites !!!

    "Clear" n'est pas une méthode du type d'élément contenu dans senstemp. (Oui, c'est un peu du Captain Obvious, cf. messages d'erreurs explicites.)

    Une map<int, truc> contient des éléments qu'on ne peut pas insérer dans une map<string,truc> (Oui, CaptainObvious aussi)

    sens[LastID] = gcnew Microsoft::VisualC::StlClr::GenericPair< System::String, SpecificationLoader::mySynset^>;


    Paul Bacelar, Ex - MVP VC++

    mardi 15 septembre 2015 12:28
    Modérateur