IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur incompréhensible


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut Erreur incompréhensible
    Bonjour,

    J'ai une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(field && (p=stringtok(field, ",")))
    Le soucis c'est que le compilateur dans ce cas là me met:
    'operator&&" not implemented in type 'string' for arguments of the same type
    J'ai essayé de voir en mettant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(field != "" && (p=stringtok(field, ",")))
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(field.empty() && (p=stringtok(field, ",")))
    L'erreur affichée maintenant est :
    Illegal structure operation
    Comment faire pour que ça soit valide, et je me pose quand même des questions par rapport à ce langage car bon en C je doute que cela aurrait posé problème avec un type équivalent. field est de type string.

    Edit: j'ai oublié de préciser, je compile avec cpp builder, mais je ne l'ai pas mis sur le forum adéquat car je ne sais pas si c'est un problème spécifique à ce compilateur.

    Merci

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Heu dans tes 3 while tu teste des choses différente, c'est normal ?

    field != "" -> te renvoie vrai si le string n'est pas nul
    field.empty() -> te renvoie vrai si le strnt est nul .

    Sinon , que te renvoie cela ( je n'ai jamais utilisé donc je n'en sais rien .. )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    p=stringtok(field, ",")
    Enfin si tu voulais tester l'égalité de p avec le menbre de droite il faut deux signes égal ( == ) sinon c'est une affectation . ( enfin ca se trouve c'est fait exprés mais bon , dsl dans ce cas ^^ )

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Alors déjà en effet j'ai oublié le ! je veux bien vérifier, dans tous les cas, que field n'est pas nulle.

    En outre, pour la seconde partie je sais ce que je fais, je veux vérifier si la valeur affectée à p n'est pas nulle.

  4. #4
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    tu as testé en enlevant la 2e partie de ta condition? pour voir l'erreur.

    Sinon c'est peut être une erreur sur la ligne d'avant, ca arrive que des fois le compilateur soit un peu perdu :-)

    Sinon si field est de type AnsiString ce n'est pas la méthode empty qu'il faut utiliser mais IsEmpty.

    Bon courage

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    ben avec while(field) ça marche parfaitement, donc ça vient bien du && après le field quoi...

    Et field est de type string.

    C'est quand même incompréhensible.

    Edit: Et laissant les && ben là l'erreur est compréhensible, disant que la syntax est incorrect...

  6. #6
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    bon moi avec borland c++builder je n'ai pas de string avec un petit s.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       String field;
       field = "blabal";
       int n = 1;
       if(!field.IsEmpty() && n==1)
       	Application->MessageBox("blabla", "ouais", MB_OK);
    Voilà un petit bout de code stupide mais qui teste si field est vide ou pas. Je pense pas que field soit du même type que toi. Je pense que tu utilise le string de la STL mais mon borland refuse de le faire ... (même avec l'include)

    Sinon je ne trouve pas non plus stringtok comme fonction mais il doit falloir un include que je n'ai pas mis ou alors c'est le même problème qu'au dessus.

    Enfin, peut etre que si tu utilise le type AnsiString de borland tu seras moins embété.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    stringtok est une fonction à moi,

    et il faut utiliser std::string (ou using namespace std).

    En outre oui peut etre qu'avec AnsiString je n'aurrais plus de problèmes c'est vrai mais bon, dans mon programme j'hesite entre tout AnsiString ou tout string, parce que la conversion entre les deux est inexitante (utiliser .c_str() à chaque fois c'est lourd). Mais bon y a quand même des fonctions très utiles dans la std, je ne sais pas si il y a des equivalents pour AnsiString, et ainsi que pour la gestion des fichiers j'utilise std::<i/p>fstream... Donc à la limite si vous avez des équivalents pour la lecture/écriture de fichiers sans utiliser std, ainsi que les équivalents des fonctions find_first_not_of(), getline(), etc...

    Parce que c'est vrai que Borland n'a pas l'air de beaucoup aimer/utiliser cette librairy, déjà qu'il n'y a pas une aide formidable par rapport à elle. Puis ça me permettrait de passer à une compatibilité parfaite avec les composants de la VCL qui utilisent des chaines AnsiString par exemple...

  8. #8
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    ok je vois pour l'utilisation de la STL aevc Borland. Alors je pense pas que ce soit le && qui ne fonctionne pas dans ton code car j'ai essayé un petit test qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       std::string field;
       field = "blabal";
       int n;
       if(!field.empty() && (n=test()))
          Application->MessageBox("blabla", "ouais", MB_OK);
    ma fonction test ne fait que renvoyer 2. Donc la on se rapproche tres fortement de ce que tu fais, non?

    Enfin tout ca pour dire que je pense qu'il y a une erreur dans ton code avant cette condition.

    Sinon à toi de voir, car c'est vrai que la STL c'est cool et on peut s'en servir partout mais que quand tu te sers de quelquechose dans Borland c'est que des AnsiString (qui ceci dit ont un paquet de fonctionnalités de recherche, de conversion, d'edition ... regarde dans l'aide de Borland). Donc à toi de voir

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Pour les fichiers avec borland qu'est-ce qui est commun d'utiliser ? j'ai vu _rtl_*() mais bon le nom donne pas envie d'utiliser. (je sais ça commenceà sortir du sujet).

    Sinon je ne comprends pas trop parce que dans ce bloc j'ai juste un appel à une methode Clear() d'un TStringList donc bon je doute queç a pose problème.. Après la fonction stringtok() renvoit un string et non un entier, mais il modifie la variable field donc après tout peut etre que ça peut poser problème.

  10. #10
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    Moi j'utilise très peu de fichiers dans mes programmes (c'est aussi les sujets qu'on me donne qui fait ca) jusqu'a présent j'ai utilisé des fichiers ini qui sont tres simples à utiliser (regarde la FAQ à ce sujet).

    Sinon tu peux me mettre ton code en mp, parce que la je vois pas trop :-) ou alors un petit mail avec les sources (histoire que j'ai pas tout à copier pour refaire un projet) si jamais elles sont pas trop grosses :-)

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Hum en fait ça doit etre ça parce qu'en mettant juste
    while((p=stringtok(field, ",")))
    Ca pose problème. Bon ben dans ce cas là l'entete de la fonction est:
    std::string stringtok(std::string &in, const char * const delimiters = " \t\n")

    et lorsque je touche à la variable donc dans la fonction "in" :
    in = ""; ou in = in.substr(j+1);

    Voila, peut etre qu'il faut faire "autre chose" pour pouvoir avoir le droit d'accéder à une fonction qui a été appelé ailleurs, bien que j'ai quand même mis &in, ce qui implique que c'est l'adresse qui est donnée (je ne connais pas très bien ce domaine là)

  12. #12
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    ca y est j'ai compris :-)
    en fait comme ta fonction stringtok retourne un string, en fait il sait pas trop quoi tester. Donc il faut que tu fasse l'appel a la fonction en dehors de ta condition. Donc ca donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string s = stringtok(...);
    while(!s.empty())
    {
      //ton traitement ...
      s = stringtok(...);
    }
    Ca répond a ta question?

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 49
    Points : 19
    Points
    19
    Par défaut
    Ah en effet, merci (à noter qu'en C ça aurrait marché avec un char gniak)

    Bon ben je vais utiliser une boucle for alors poru que ça soit plus beau que ce que tu as écrit :)

    Merci bien en tous cas.

    Edit: pour eviter les grosses conneries, je vais rectifier ma parenthèse en disant "un char*"

  14. #14
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Points : 25
    Points
    25
    Par défaut
    cool si ca fonctionne alors je pense que pour faire plaisir aux modérateurs et admin, tu pourrais cliquer sur Résolu en bas de la page :-)

    Ah oui et désolée, c'était crade mais bon c'était compréhensible :-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] Erreur incompréhensible
    Par Strab dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 08/07/2005, 17h15
  2. [2.1][jdk1.3][Junit] Erreur incompréhensible!
    Par Sniper37 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 29/04/2005, 19h03
  3. Erreur incompréhensible à la ligne 200 (sur 190 ?!)
    Par transistor49 dans le forum Qt
    Réponses: 3
    Dernier message: 22/03/2005, 23h09
  4. [Fichiers] Erreur incompréhensible
    Par Clorish dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h18
  5. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo