web-dev-qa-db-ja.com

g ++エラー:「stricmp」はこのスコープで宣言されていません(ただし、「strcmp」は問題ありません)

次の非常に単純なソースコードをコンパイルしようとしています。

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

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

...しかし、次のエラーメッセージが表示されます。

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

ただし、stricmp()の代わりにstrcmp()を使用すると、すべて正常です!

ここで何が間違っているのでしょうか? strcmp()が許可されている場合、stricmp()は許可されませんか?

Sureley、これはstrcmp/stricmpを使用せずに、はるかに優れた方法で記述できます。

しかし、それはここでのポイントではありません。

Stricmp()の呼び出しを多く使用するソフトウェアを移植しています。そして、どうにかして可能であれば、stricmpへのすべての呼び出しを変更するために必要なすべての努力を避けたいと思います。

これに関するどんな助けも大歓迎です!

ところで:Ubuntu karmic OS(v9.10)とg ++ v4.4.1を使用しています。

ところで:おわかりのように、「#include string.h」または「namespace std」でいくつか試してみましたが、何も助けにはなりませんでした。

26
anon

strcasecmp()を試してください。これが マニュアルページ です。 4.4BSDおよびPOSIX.1-2001に準拠しています。

35
Gonzalo

stricmpはPOSIXでもANSIでもない 。したがって、コンパイラまたは標準ライブラリがPOSIXまたはANSI規格に厳密に準拠している場合、strcmpが許可されているかどうかは問題ではありません。ライブラリ関数(おそらくGCCスイートの場合)。

14
Mark Rushakoff

探しているプラ​​ットフォームでstrcasecmpでstricmpを上書きするための定義を追加します。

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

その後、常にstricmpを使用できます。

11