web-dev-qa-db-fra.com

Erreur g ++: «strictmp» n'a pas été déclaré dans cette étendue (mais OK pour «strcmp»)

J'essaie de compiler le morceau de code source très très simple suivant:

#include <cstring>
// #include <string.h>
// using namespace std;

class Helper {
public:
    int cStringsAreEqual(const char *s1, const char *s2) {
        return stricmp(s1, s2);
    }
};

... mais je reçois le message d'erreur suivant:

   g++ error: ‘stricmp’ was not declared in this scope

Cependant quand j'utilise strcmp () au lieu de stricmp () alors tout va bien!

Que peut-il y avoir de mal ici? Ne devrait-on pas autoriser stricmp () lorsque strcmp () est autorisé?

Sureley, tout cela pourrait être écrit d'une bien meilleure manière sans utiliser strcmp/strictmp.

Mais ce n'est pas le point ici.

Je porte un logiciel - qui utilise beaucoup les appels à strictmp (). Et si possible, je voudrais éviter tous les efforts nécessaires pour changer chaque appel en strictmp.

Toute aide à ce sujet serait très appréciée!

BTW: J'utilise Ubuntu karmic OS (v9.10) avec g ++ v4.4.1.

BTW: comme vous pouvez le voir, j'ai également fait des essais avec '#include string.h' ou avec 'namespace std' mais rien n'y fait.

26
anon

Essayez strcasecmp(). Voici le page de manuel pour cela. Il est conforme à 4.4BSD et POSIX.1-2001.

35
Gonzalo

stricmp n'est ni POSIX ni ANSI , donc peu importe si strcmp est autorisé, si votre compilateur ou bibliothèque standard respecte strictement la norme POSIX ou ANSI fonctions de bibliothèque (comme c'est probablement le cas avec la suite GCC).

14
Mark Rushakoff

Ajoutez une définition pour écraser strictmp avec strcasecmp sur les plates-formes que vous recherchez.

#ifdef _IPHONE <- your platform define here
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif

Ensuite, vous pouvez toujours utiliser strictmp toujours.

11
Ryan Christensen