Tableau de string

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 10 août 2012 à 17:37
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 13 août 2012 à 15:22
Bonsoir,

Je n'arrive pas a faire un truc tout simple (et ça m'agace mais alors m’agacccccccce)

Je commence a utiliser espace de nom std (qui vas me faire gagné pas mal de temps maintenant que je peut l'utiliser dans mes projets pro, eennffiinn ).

Je cherche à passer un pointeur sur tableau a une sous fonction qui doit dimensionner le tableau, le remplir, et se terminer (avec une valeur de retour pour remonté les erreurs)

Habituellement j'utilisais des char*, je débute avec les string (et wstring).

Je fait donc :
Déclaration :
char DecoupeLigne(const wstring Ligne,const wstring Separateur,int* NombreDeChampsTrouve,wstring** TableauDeStringTrouve)
{
[...]
*TableauDeStringTrouve = (wstring*)malloc(sizeof(wstring*)*NombreDeChampsLut);
for (int Compteur = 0 ; Compteur<NombreDeChampsLut ; Compteur++)
{
(*TableauDeStringTrouve)[Compteur] = new wstring(); //<-- ICI
(*TableauDeStringTrouve)[Compteur] = CourElement->Item;
CourElement = CourElement->Suivant;
}
}

Appel :
wstring Ligne;
wstring* ListeDonnees;
[...]
DecoupeLigne(Ligne,L"\t",&NombreItem,&ListeDonnees);


J'ai une erreur a la compilation sur la ligne noté "ICI" :
Error 1 error C2106: '=' : left operand must be l-value xxx.cpp 120 1 yyy

Ce qui veux dire (sauf erreur de ma part ^^) que je cherche a mettre un pointeur dans une variable...

Je comprend bien l'erreur (l'opérateur "=" est redéfini par la classe string je ne peut donc pas insérer comme ça l'adresse de ma variable dans mon tableau , ce qui me permet de faire la ligne suivante sans "strcpy" ou autre "memcpy" ^^) mais je ne trouve pas de solution pour contourner ça

Comment faire svp ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo

16 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
13 août 2012 à 14:44
Je pense que je doit convertir mon "wostringstream" en "basic_istream". Et je trouve pas

Oula, non. Surtout pas. Attention, il n'y a pas d'héritage mais plutôt du gros templating ^^, ce qui n'est pas pareil. Tu ne pourras donc pas faire cette "conversion". Un "std:wostringstream" est en réalité alias pour le type "std::basic_istream<wchar_t>".
Le moteur de templating est la chose la plus puissante du C++, mais aussi la plus complexe à aborder (c'est presque un langage dans le langage).

Néanmoins, ce n'est pas ici ton erreur. Il y en C++, une classe pour lire (std::ifstream), une classe pour écrire (std::ofstream) ou une classe pour faire les deux (std::fstream). Ici tu as indiqué un "std::wofstream" au lieu d'un "std::wifstream".

Voici un exemple fonctionnel:
#include 
#include <fstream>
#include <sstream>
#include <vector>

#include <string>

int main()
{
  std::wifstream file ("test.txt");
  if (file)
  {
    std::wstring line;
    std::vector<std::wstring> datas;
    while (std::getline(file, line))
    {
      std::wstring word;
      std::wistringstream buff(line);
      while (std::getline(buff, word, L'\t'))
datas.push_back(word);
    }
  }

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
Rejoignez-nous