none
conversion de données RRS feed

  • Question

  • bonjour

    je ne sais pas comment convertir les données lues dans le fichier pour affecter SpecificationLoader::SensDictionary: j'ai codé:

    void SensDictionnary::LoadDictionnary( char* FileName)
    {
       std::ifstream read;
    
       read.open(FileName);
       *this << read;
       read.close();
    }

    et le compilateur m'a répondu:

    1>..\..\..\..\Utility\Dictionnaire\src\Dictionnaire.cpp(51): error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : impossible de déduire l'argument modèle pour 'std::basic_ostream<_Elem,_Traits> &' à partir de 'SpecificationLoader::SensDictionnary'
    1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string(489) : voir la déclaration de 'std::operator <<'
    1


    Jean Noël Martin


    • Modifié JeanNoel53 mercredi 23 septembre 2015 01:00
    dimanche 20 septembre 2015 22:24

Réponses

Toutes les réponses

  •  *this << read;
    C'est sensé appelé quelle fonction/méthodes ???

    Paul Bacelar, Ex - MVP VC++

    lundi 21 septembre 2015 10:14
    Modérateur
  • celle ci, qui me compile pas actuellement

    istream^ operator>>(istream^ read, SensDictionnary^ dict)


    Jean Noël Martin

    lundi 21 septembre 2015 12:19
  • ">>", c'est pas la même chose que "<<", et la signature ne colle pas.

    Paul Bacelar, Ex - MVP VC++

    lundi 21 septembre 2015 12:37
    Modérateur
  • quand je code :

    read >> buffer;

    je dit que le contenu de la  lecture doit se retrouver dans buffer et j'utilise la méthode operator read

    j'ai codé:

            void SensDictionnary::LoadDictionnary( char* FileName)
    	{ // 1
    		std::ifstream read;
    		std::string buffer;
    
    		read.open(FileName);
    		read >> buffer;
    		wchar_t* s = CStrConv::ambstowcs( (char*)buffer.c_str());
    		(*this) = gcnew String( s);
    		CStrConv::StrFreeW( s);
    		read.close();
    	} // 1

    et la methode read est comme suit:

    	istream operator>>(istream read, SensDictionnary^ dict)
    	{
    		char BufLine[600];
    		char* pTerm;
    		System::String^ word;
    		mySynset^ syns;
    		int Len;
    		int iNumFormula;
    		int iNumEntity;
    		int iNumVirtualEquation;
    		Microsoft::VisualC::StlClr::GenericPair<System::String^, SpecificationLoader::mySynset^>^ el;
    
    		iNumFormula = 0;
    		iNumEntity = 0;
    		iNumVirtualEquation = 0;
    		while( read->good())
    		{ // 2
    			read->getline(BufLine, 600);
    			pTerm = strtok( BufLine, "\t");
    			if(pTerm != NULL)
    			{ // 3
    				wchar_t* temp = CStrConv::ambstowcs( pTerm);
    				word = gcnew String( temp);
    				CStrConv::StrFreeW(temp);
    				pTerm =strtok( NULL, "\t");
    				syns->Number = atoi( pTerm);
    				pTerm = strtok( NULL, "\t");
    				syns->Frequence = atoi( pTerm);
    				pTerm =strtok( NULL, "\t");
    				if (pTerm == NULL)
    					syns->Identifier = 0;
    				else
    					syns->Identifier = atoi( pTerm);
    				pTerm =strtok( NULL, "\t");
    				if (pTerm == NULL)
    					syns->pos = 0;
    				else
    					syns->pos = atoi( pTerm);
    				if (syns->pos == 7)
    					iNumFormula++;
    				if (syns->pos == 8)
    					iNumEntity++;
    				if (syns->pos == 17)
    					iNumVirtualEquation++;
    				pTerm =strtok( NULL, "\t");
    				syns->Value = atof( pTerm);
    				pTerm =strtok( NULL, "\t");
    				if( pTerm != NULL)
    				{ // 4
    					wchar_t* temp = CStrConv::ambstowcs( pTerm);
    					syns->Word = gcnew String( temp);
    					CStrConv::StrFreeW( temp);
    					pTerm = strtok( NULL, "\t");
    					temp = CStrConv::ambstowcs( pTerm);
    					syns->Word = gcnew String( temp);
    					syns->Definition = gcnew String( temp);
    					CStrConv::StrFreeW( temp);
    					el->first = word;
    					el->second = syns;
    					sens->Add( el);
    				} // 4
    			} // 3
    		} // 2
    		return read;
    	}// 1

    Et le message d'erreur à changé

    1>..\..\..\..\Utility\Dictionnaire\src\Dictionnaire.cpp(58): error C2582: 'operator =' fonction non disponible dans 'SpecificationLoader::SensDictionnary'
    



    Jean Noël Martin




    • Modifié JeanNoel53 lundi 21 septembre 2015 15:05
    lundi 21 septembre 2015 14:14
  • Franchement, vous faites vraiment n'importe quoi.

    Ça fait des années que je vous dis de lire un cours sur du C++. (même pas C++11 ou C++/CLI).

    (*this) = gcnew String( s);

    Il est où l'opérateur d'affectation d'un "SensDirectory" avec une String^ ???


    Paul Bacelar, Ex - MVP VC++

    lundi 21 septembre 2015 16:28
    Modérateur
  • J'ai codé:

    la ligne d'affectation:

    (SensDictionnary^)this = (System::String^)gcnew String( s);
    la primitive operator:
        SensDictionnary^ operator = ( System::String^ dict)
        { // 1
            *this = dict;
            return( this);
        } // 1

    pour avoir une définition du symbole = mais ça n'a rien changé bien que la primitive compile: le message d'erreur à beau être explicite, il ne reconnait pas la primitive

    1>..\..\..\..\Utility\Dictionnaire\src\Dictionnaire.cpp(58): error C2440: '=' : impossible de convertir de 'System::String ^' en 'SpecificationLoader::SensDictionnary ^'
    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


    Jean Noël Martin

    • Modifié JeanNoel53 mercredi 23 septembre 2015 01:52
    lundi 21 septembre 2015 17:05
  • Votre opérateur n'est pas une méthode d'une classe, la valeur à gauche doit être passé comme la valeur à droite.

    Révisez vos cours sur la redéfinition des opérateurs et leur forme canonique.


    Paul Bacelar, Ex - MVP VC++

    mardi 22 septembre 2015 13:13
    Modérateur
  • ou trouver un cours?

    Jean Noël Martin

    mardi 22 septembre 2015 13:20
  • Google est ton ami :

    http://guillaume.belz.free.fr/doku.php?id=programmez_avec_le_langage_c


    Paul Bacelar, Ex - MVP VC++

    mardi 22 septembre 2015 14:22
    Modérateur
  • Je n'ai rien trouvé d'explicite sur les operators sur le lien que vous m'avez fourni

    cependant j'ai maintenu le code de l'operator avec les éléments qui compilaient.


    Jean Noël Martin



    • Modifié JeanNoel53 mardi 22 septembre 2015 21:56
    mardi 22 septembre 2015 18:47
  • >Je n'ai rien trouvé d'explicite sur les operators

    Si Crtl+F "opérateur" c'est pas assez explicite, je ne peux pas faire beaucoup plus.

    http://guillaume.belz.free.fr/doku.php?id=operateurs

    Vous devriez lire TOUT ce cours.

    P.S.:http://en.cppreference.com/w/cpp/language/operators


    Paul Bacelar, Ex - MVP VC++


    mercredi 23 septembre 2015 08:29
    Modérateur