&strcmpこんなのあり

[戻る]
ワルQ 2002/09/04(水) 01:49:47
新規の質問をさせて頂きます。
まず開発環境は、vc6.0 sp5 stlport4.5.3
そして、勉強中です。
質問は以下のようなコードでコンパイルすると
#include <iostream>
#include <algorithm>
#include <vector>
#include<functional>
#include<set>
using std::cout;

int mystrcmp(const char* ps1,const char* ps2)
{
    return ::strcmp(ps1,ps2);
}

int main( )
{
  std::set<char* >  s;
  s.insert("aaa");
  s.insert("bbb");
  s.insert("ccc");
//    std::vector<char*> vec;
//    vec.push_back( "aaa" );
//    vec.push_back( "bbb" );
//    vec.push_back( "ccc" );
      std::set<char* >::iterator ite;
  ite=std::find_if(s.begin(),s.end(),
        std::not1(std::bind2nd(std::ptr_fun(mystrcmp),"ccc") ) );//ok
//        std::not1(std::bind2nd(std::ptr_fun(&strcmp),"ccc") ) );ok
//    だめ    std::not1(std::bind2nd(std::ptr_fun(strcmp),"ccc") ) );    
        cout<<" "<<*ite<<std::endl;
        return 0;
}
vectorとsetで試したところ「ok」と表示したところは思うように動作するのですが
「だめ」のところはダメです。stlportを外してもダメです。
なぜstrcmpを&strcmpと改変しないといけないのでしょうか
ほかの方のコードを見ても(ちょっとしか検索してないですけど)このようにしている方は
見当たらないんですけど。
どうか理由がわかる方以内でしょうか。

ワルQ 2002/09/04(水) 05:33:13
ちょっと訂正
>どうか理由がわかる方以内でしょうか。
以内⇒いない
開発環境ですが
os:98se 2000
でためして両方同じ結果です。
ではこの問題の解答わかる方いらしゃったら
宜しくお願いします。

dairygoods 2002/09/04(水) 11:02:30
どのパターンでも上手くいきますが(vc6,sp5,win2000で確認)、
どのようにダメなのでしょうか?

ちなみに関数の場合、funcと&funcは同じ意味になります。

ワルQ 2002/09/05(木) 13:50:48
[[解決]]
dairygoodsさんどうも回答感謝します。
>どのパターンでも上手くいきますが(vc6,sp5,win2000で確認)、
>どのようにダメなのでしょうか?

えーとですねstd::ptr_func(strcmp)これが
私の環境だと以下のようなエラーが出るんですよ
C:\TES_STL\GETTIC\strcmp.cpp(15) : warning C4700: 
値が割り当てられていないローカルな変数 'ite' に対して参照が行われました。
リンク中...

そして当然のようにエラーが実行すると出るんですね。
まーfuncと&funcが同じならどうってことない問題なんですけど(たぶん)
私の環境だけですかね。一応解決にします。

古いスレッドには追加発言できません。