locked
le dictionnaire ne compile plus RRS feed

  • Question

  • et il donne des messages d'erreur différents pour les deux implémentation

    j'ai changé la déclaration de hash_map en vue de résoudre les problèmes de link et la compilation à foutu le camp

    Je vous met les deux implémentation avec leurs status d'erreur :

    le fichier de déclaration :

    #ifndef _DICT_TEMP_H
    #define _DICT_TEMP_H
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    namespace SpecificationLoader
    { // 0 ligne 8
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Collections::Generic;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace std;
    //ligne 18
    
    	ref class  SensTemporary
    	{ // 1 li 21
    	public:// li 22
    		typedef cliext::hash_map< int, mySynsetTemp^> senstemp; 
            SensTemporary::SensTemporary();
            SensTemporary::~SensTemporary();
    // ligne 26
    		mySynsetTemp^ SensTemporary::getSens( System::Int32 id);
    		void SensTemporary::updateSens( System::Int32 id, mySynsetTemp^ pSynset);
            void SensTemporary::remove( System::Int32 id);
            bool SensTemporary::addSens( System::Int32 id, mySynsetTemp^ pSynset);
            bool SensTemporary::isExist(System::Int32 id);
    	}; // 1
    	//------------------------------------------------------------------------------ ligne 54
    }; // 0
    #endif
    

    le fichier de source correspondant :

    /*---------------------------------------------------------------*/ // ligne1
    /* Global conception    : 05-23-2003 ; 11:50:52                  */
    /* Specification        : 03-26-2003 ; 14:35:29                  */
    /* ALITEC                                                        */
    /* Laval Technopole  - B.P. 0102                                 */
    /* 53001 LAVAL CEDEX  (c) Copyright AL4TEC                 V 0.2 */
    /*---------------------------------------------------------------*/
    /*******************************************************************************
     * NOM:                 Jean Noel Martin
     * ROLE:
     * HISTORIQUE:
        * 05/05/2001, xxx, initial version
    *******************************************************************************/ //li 13
    
    #include "stdafx.h"
    #include "EnumerationM.hpp"
    #include "StructureM.h"
    #include "WfStream.h"
    #include "TempDict.h"
    // ligne 23
    namespace SpecificationLoader
    {
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Collections::Generic;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace Microsoft::VisualC::StlClr;
    	using namespace std;
    	
    	SensTemporary::SensTemporary() {}
    	SensTemporary::~SensTemporary() {}
    //------------------------------------------------------------------------------ ligne 158
    	mySynsetTemp^ SensTemporary::getSens( System::Int32 id)
        {
    		return senstemp[ id];;                                                       //ligne 161
    	}
    //------------------------------------------------------------------------------ ligne 163    
    	void SensTemporary::remove( System::Int32 id)
        {
             senstemp.erase(id);
        }
        void SensTemporary::updateSens( System::Int32 id, mySynsetTemp^ pSynset)
        {
            senstemp[ id] = pSynset;
        }
    
        bool SensTemporary::isExist(System::Int32 id)
        {
            int i;
            i = senstemp.count(id);
    		if( i > 0)
            {
    			return true;
    		}
    		else
            {
    			return false;
    		}
    	}
    
    	bool SensTemporary::addSens( System::Int32 id, mySynsetTemp^ pSynset)
        {
            int i;
    
            i = senstemp.count(id);
    		if( i > 0)
            {
    			return false;
    		}
    		else
            {
    			senstemp[i] = pSynset;
    			return true;
    		}
    	}
    };
    

    et le fichier d'erreur correspondant

    1>DictTemp.cpp(39): error C2275: 'SpecificationLoader::SensTemporary::senstemp' : utilisation non conforme de ce type comme expression
    1>DictTemp.cpp(44): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>DictTemp.cpp(44): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>DictTemp.cpp(48): error C2143: erreur de syntaxe : absence de ';' avant '['
    1>DictTemp.cpp(48): error C3455: 'id' : aucun des constructeurs d'attributs ne correspond aux arguments
    1>          est peut-être 'id::id(int)'
    1>          lors de la tentative de mise en correspondance de la liste des arguments '()'
    1>DictTemp.cpp(48): error C2143: erreur de syntaxe : absence de ';' avant '='
    1>DictTemp.cpp(54): error C2275: 'SpecificationLoader::SensTemporary::senstemp' : utilisation non conforme de ce type comme expression
    1>DictTemp.cpp(54): error C2228: la partie gauche de '.count' doit avoir un class/struct/union
    1>DictTemp.cpp(69): error C2275: 'SpecificationLoader::SensTemporary::senstemp' : utilisation non conforme de ce type comme expression
    1>DictTemp.cpp(69): error C2228: la partie gauche de '.count' doit avoir un class/struct/union
    1>DictTemp.cpp(76): error C2143: erreur de syntaxe : absence de ';' avant '['
    1>DictTemp.cpp(76): error C2337: 'i' : attribut introuvable
    1>DictTemp.cpp(76): error C2143: erreur de syntaxe : absence de ';' avant '='
    

    puis la deuxième implémentation avec les mêmes composants :

    Le fichier de déclaration

    #ifndef _DICTIONNAIRE_H
    #define _DICTIONNAIRE_H
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    namespace SpecificationLoader
    { // 0 ligne 8
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Collections::Generic;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace std;
    //ligne 18
    
    
    	ref class  SensDictionnary
    // ligne 22
    	{ // 1
    	public:
    		typedef cliext::hash_map< System::String^, mySynset^> sens; //ligne 25
            SensDictionnary::SensDictionnary();
            SensDictionnary::~SensDictionnary();
    		bool SensDictionnary::isKnown( System::String^ word);
    		void SensDictionnary::reset();
    		SensDictionnary::SensDictionnary( char* FileName);
            int SensDictionnary::SaveSens( char*);
            mySynset^ SensDictionnary::getSens( System::String^);
            bool SensDictionnary::addSens( System::String^, mySynset^);
            void SensDictionnary::updateSens( System::String^ word, mySynset^ pSynset);
            void SensDictionnary::remove( System::String^);
            System::String^ toString();
            System::String^ keyListString();
    	}; // 1
    // ligne 40
    };
    #endif

    puis le fichier de sources :

    /*---------------------------------------------------------------*/ // ligne1
    /* Global conception    : 05-23-2003 ; 11:50:52                  */
    /* Specification        : 03-26-2003 ; 14:35:29                  */
    /* ALITEC                                                        */
    /* Laval Technopole  - B.P. 0102                                 */
    /* 53001 LAVAL CEDEX  (c) Copyright AL4TEC                 V 0.2 */
    /*---------------------------------------------------------------*/
    /*******************************************************************************
     * NOM:                 Jean Noel Martin
     * ROLE:
     * HISTORIQUE:
        * 05/05/2001, xxx, initial version
    *******************************************************************************/ //li 13
    
    #include "stdafx.h"
    #include "EnumerationM.hpp"
    #include "StructureM.h"
    #include "WfStream.h"
    #include "StrConv.h"
    #include "Dictionnaire.h"
    // ligne 23
    namespace SpecificationLoader
    {
        using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Collections::Generic;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace std;
    //------------------------------------------------------------------------------ ligne 35
    
    //----------- METHOD IMPLEMENTATION OF SensDictionnary Class -------------------
    
    	SensDictionnary::SensDictionnary() {}
    	SensDictionnary::~SensDictionnary() {}
    //------------------------------------------------------------------------------ ligne 41
    	bool SensDictionnary::isKnown( System::String^ word)
    	{
    		if( sens.find( word) == sens.end())
    		{
    			return false;
    		}
    		else
    		{
    			return true;
    		}
    	}
    //------------------------------------------------------------------------------ ligne 54
    	void SensDictionnary::reset()
    	{
    		sens.clear();
    	}
    
    	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 70
    	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 86
    	mySynset^ SensDictionnary::getSens( System::String^ word)
    	{
    		return sens[word];
    	}
    //------------------------------------------------------------------------------ ligne 91
    	bool SensDictionnary::addSens( System::String^ word, mySynset^ pSynset)
    	{
    		if( sens.count( word) > 0)
    		{
    			return false;
    		}
    		else
    		{
    			sens[word] = pSynset;
    			return true;
    		}
    	}
    //------------------------------------------------------------------------------ ligne 104
    	void SensDictionnary::remove( System::String^ word)
    	{
    		sens.erase(word);
    	}
    //------------------------------------------------------------------------------ ligne 109
    	void SensDictionnary::updateSens( System::String^ word, mySynset^ pSynset)
    	{
    		sens[word] = 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 141
    	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;
    	}
    //------------------------------------------------------------------------------ ligne 155
    };

    et le fichier d'erreurs

    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(42): error C2059: erreur de syntaxe : '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(43): error C2143: erreur de syntaxe : absence de ';' avant '{'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(46): error C2181: instruction else sans if correspondant non conforme
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(54): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(54): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(86): error C2275: 'SpecificationLoader::SensDictionnary::sens' : utilisation non conforme de ce type comme expression
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(91): error C2059: erreur de syntaxe : '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(92): error C2143: erreur de syntaxe : absence de ';' avant '{'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(95): error C2181: instruction else sans if correspondant non conforme
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(97): error C2143: erreur de syntaxe : absence de ';' avant '['
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(97): error C2337: 'word' : attribut introuvable
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(97): error C2143: erreur de syntaxe : absence de ';' avant '='
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(104): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(104): error C2143: erreur de syntaxe : absence de ';' avant '.'
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(109): error C2143: erreur de syntaxe : absence de ';' avant '['
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(109): error C2337: 'word' : attribut introuvable
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(109): error C2143: erreur de syntaxe : absence de ';' avant '='
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(117): error C2275: 'SpecificationLoader::SensDictionnary::sens' : utilisation non conforme de ce type comme expression
    1>L:\usr\Verify\Memoria\dev\Utility\Dictionnaire\src\Dictionnaire.cpp(117): fatal error C1903: impossible de récupérer à partir des erreurs précédentes ; arrêt de la compilation
    1>

    comme quoi la même modif ne donne pas le même diagnostique.


    Jean Noël Martin

    jeudi 30 juillet 2015 08:36

Réponses

  • Bonjour,

    Cela donne le même diagnostique, vous utilisez un typedef comme une variable.

    En enlevant le mot clé typedef dans l'en-tête de la classe, cela résoudra votre problème.

    nelbok

    jeudi 30 juillet 2015 09:04
  • Bonjour,

    Je ne connais pas le problème de link que vous rencontrez, cependant, si vous voulez utilisez le typedef :

    typedef cliext::hash_map< int, mySynsetTemp^> MySensType;
    MySensType sensTemp;
    nelbok
    jeudi 30 juillet 2015 10:04

Toutes les réponses

  • Bonjour,

    Cela donne le même diagnostique, vous utilisez un typedef comme une variable.

    En enlevant le mot clé typedef dans l'en-tête de la classe, cela résoudra votre problème.

    nelbok

    jeudi 30 juillet 2015 09:04
  • Mais j'ai pris celal'exemple de msdn ci dessous

    je sais que si je retire le mot typedef ça compile mais justement je cherche une solution aux problèmes de link


    Jean Noël Martin

    jeudi 30 juillet 2015 09:38
  • Bonjour,

    Je ne connais pas le problème de link que vous rencontrez, cependant, si vous voulez utilisez le typedef :

    typedef cliext::hash_map< int, mySynsetTemp^> MySensType;
    MySensType sensTemp;
    nelbok
    jeudi 30 juillet 2015 10:04