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++Builder Discussion :

Call to 'StrPos' is ambiguous


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut Call to 'StrPos' is ambiguous
    Bonjour,

    je suis sous C++ Builder 11 et je souhaite utiliser la fonction StrPos(chaine1,chaine2) qui compare 2 chaines et revoie NULL si la 2e n'est pas dans la 1ère.

    A la compilation, j'ai cette erreur :
    [bcc32c Erreur] Graf3d.cpp(366): call to 'StrPos' is ambiguous
    System.SysUtils.hpp(3222): candidate function
    System.AnsiStrings.hpp(158): candidate function

    Quelqu'un aurait une idée de quoi faire svp ?
    Merci

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    salut comme indiqué dans l'aide



    Warning: The ANSI version of StrPos is deprecated. Please use the AnsiStrings unit.

    Returns a pointer to the first occurrence of STR2 in STR1.

    StrPos returns a pointer to the first occurrence of Str2 in Str1. If Str2 does not occur in Str1, StrPos returns nil (Delphi) or NULL (C++).

    utilise en lieu et place
    extern DELPHI_PACKAGE char * __fastcall AnsiStrPos(char * Str, char * SubStr)/* overload */;

    la déclaration de cette fonction est située dans :System.AnsiStrings.hpp$

    cordIalrmrnt

    Citation Envoyé par futneguet Voir le message
    Bonjour

    je suis sous C++ Builder 11 et je souhaite utiliser la fonction StrPos(chaine1,chaine2) qui compare 2 chaines et revoie NULL si la 2e n'est pas dans la 1ère.

    A la compilation, j'ai cette erreur :
    [bcc32c Erreur] Graf3d.cpp(366): call to 'StrPos' is ambiguous
    System.SysUtils.hpp(3222): candidate function
    System.AnsiStrings.hpp(158): candidate function

    Quelqu'un aurait une idée de quoi faire svp ?
    Merci
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut
    Merci de ta réponse.

    J'avais bien lu l'aide et j'avais donc tenté d'utiliser la fonction AnsiStrPos mais j'ai exactement la même erreur à la compilation :

    [bcc32c Erreur] Graf3d.cpp(366): call to 'AnsiStrPos' is ambiguous
    System.SysUtils.hpp(3432): candidate function
    System.AnsiStrings.hpp(178): candidate function

  4. #4
    Membre actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Points : 292
    Points
    292
    Par défaut
    Conflit (de noms )ou de surcharge, le compilateur vous demande de sélectionner la fonction que vous souhaitez utiliser

    La même erreur se produit en Delphi, pour lever cette ambiguïté ajouter le nom de l’unité

    AnsiStrings.StrPos(...)

  5. #5
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Salut,

    Je ne connais pas spécialement C++ Builder mais AnsiStrings est certainement un espace de nom, ce qui donne AnsiStrings::StrPos()

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut
    Je pense qu'effectivement la solution est de trouver la bonne écriture afin d'éviter la confusion entre les 2 fonctions mais je n'arrive pas à trouver la bonne malgré pas mal de tentatives.

    Celle que tu suggères est peut-être la bonne pour Delphi mais ne marche pas pour C++ Builder.

  7. #7
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par futneguet Voir le message
    Celle que tu suggères
    Tu as 2 messages et tu t'adresses à une seule personne. C'est qui tu ?

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut
    Je m'adressais à wheel mais la remarque est la même pour toi kaitlyn, ta suggestion ne fonctionne pas.

  9. #9
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Dans ce cas présente un code minimaliste (mais complet) qui produit le même problème.

  10. #10
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut
    Voici un code minimaliste qui génère l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char* c1;
    char* c2;
    char* res;
    res = StrPos(c1,c2);
    Et c'est la même chose en remplaçant StrPos par AnsiStrPos.
    Bien sûr, dans mon code réel, c1 et c2 ont une valeur non nulle.

  11. #11
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Non, il manque les #include, la fonction main(), etc. Il faut qu'il puisse être compilable.
    https://en.wikipedia.org/wiki/Minima...ucible_example
    https://babeuloula.fr/blog/comment-c...oductible.html

  12. #12
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut,
    la biblitthèque AnsiString est sujette a de nombreux changements raison pour laquelle je te conseille d'utiliser les fonctions de la STL
    un petit exemple est mieux qu'une longue tirade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <iostream>
    #include <cstring>
     
    int main()
    {
        const char *str = "Try not. Do, or do not. There is no try.";
        const char *target = "not";
        const char *result = str;
     
        while ((result = std::strstr(result, target))) {
            std::cout << "Found '" << target 
                      << "' starting at '" << result << "'\n";
     
            // Increment result, otherwise we'll find target at the same location
            ++result;
        }   
    }
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 107
    Points : 46
    Points
    46
    Par défaut
    Salut,

    effectivement ta proposition fonctionne DjmSoftware, merci.

    Sinon j'ai trouvé une autre solution, c'est d'utiliser le type WideChar* à la place des char*, WideChar étant défini dans l'unité System par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef wchar_t              WideChar;         // Unicode character
    Du coup, ça doit permettre au compilo de faire la différence entre les 2 fonctions StrPos et lève l'ambiguité.
    Pas d'erreur avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WideChar* CompBmp;
    WideChar* c1;
    WideChar* c2;
    CompBmp = StrPos(c1,c2);
    Merci à tous !

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/05/2017, 15h30
  2. call of overloaded 'specifier’ is ambiguous
    Par LiquidHuk dans le forum C++
    Réponses: 9
    Dernier message: 17/07/2014, 11h38
  3. vba nom ambigu detecté dans un call
    Par cecile_64 dans le forum Excel
    Réponses: 2
    Dernier message: 16/08/2012, 10h17
  4. [POO] Héritage et "ambiguous call"
    Par coberle dans le forum C++
    Réponses: 4
    Dernier message: 18/11/2008, 17h46
  5. Réponses: 21
    Dernier message: 06/05/2007, 11h49

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