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 confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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 Expert
    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
    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 confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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 tr�s 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
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    677
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 677
    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 confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    677
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 677
    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 confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    677
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 677
    Par d�faut
    Dans ce cas pr�sente un code minimaliste (mais complet) qui produit le m�me probl�me.

  10. #10
    Membre confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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 Expert
    Femme Profil pro
    ..
    Inscrit en
    D�cembre 2019
    Messages
    677
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    �ge : 95
    Localisation : Autre

    Informations professionnelles :
    Activit� : ..

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 677

  12. #12
    Membre Expert
    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
    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 confirm�
    Inscrit en
    Octobre 2002
    Messages
    109
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 109
    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