- PR -

C++/CLIでqsort使う

1
投稿者投稿内容
STEPS
会議室デビュー日: 2006/11/09
投稿数: 6
投稿日時: 2006-11-15 13:49
STEPSと申します。
Windows2000
VC++2005 C++/CLI
の環境で開発を行っております。
よろしくお願いいたします。

件名の通りqsortを使いたいのですが、
関数ポインタの宣言方法と、
引数の記述方法をご教授願えればと思い
書き込みを行いました。

よろしくお願いいたします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-11-15 13:57
とりあえず、Web検索してみましょう。
サンプルコードはゴロゴロしていますよ。
Google検索 キーワード「qsort」
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-11-15 14:01
ちなみに、マネージドのコードでqsortを使うことはないと思います。
System::Arrayの下のSortメソッド辺りでソートは可能です。

また、STLのstd::vectorやstd::listを使えば、ソートさせるメソッドや関数
は普通にあります。
STEPS
会議室デビュー日: 2006/11/09
投稿数: 6
投稿日時: 2006-11-15 14:54
Blue様
ご回答ありがとうございます。

今回qsortを使おうと考えた理由が、他のC++言語からソースを移植しようと
した為です。arrayを用いた配列の宣言方法に変更すると、
memset等が行えなくなってしまう為、qsortをそのまま使用したいと考えました。

qsortの検索で一番上に上がってくるページで

qsort(data, 10, sizeof(int), (int (*)(const void*, const void*))compare_int);

というサンプルが記載されていますが、
C++/CLI環境で同じ記述をすると
型キャスト' : 'overloaded-function' から 'int (__clrcall *)(const void *,const void *)' に変換できません。
というエラーが発生してしまいます。

やはり、C++/CLI環境ではSystem::ArrayのSortメソッドを使うべきなのでしょうか?

質問ばかりで申し訳ありませんがよろしくお願いいたします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-11-15 15:03
引用:

STEPSさんの書き込み (2006-11-15 14:54) より:
arrayを用いた配列の宣言方法に変更すると、
memset等が行えなくなってしまう為、qsortをそのまま使用したいと考えました。


array<〜>でもmemset使えますけど。

コード:

array<int>^ Numbers = gcnew array<int>(10);
pin_ptr<int> p = &Numbers[0];
memset(p, 0x00, Numbers->Length * sizeof(int) );



引用:

型キャスト' : 'overloaded-function' から 'int (__clrcall *)(const void *,const void *)' に変換できません。
というエラーが発生してしまいます。



#pragma unmanaged
#pragma managed

の間に記述してください。
その際にコンパイルオプションを変更する必要があるかもしれません。(/clr)

引用:

やはり、C++/CLI環境ではSystem::ArrayのSortメソッドを使うべきなのでしょうか?


ケースバイケースでしょう。

[ メッセージ編集済み 編集者: Blue 編集日時 2006-11-15 15:07 ]
STEPS
会議室デビュー日: 2006/11/09
投稿数: 6
投稿日時: 2006-11-15 22:29
Blue様
ご回答ありがとうございました。

unmanagedによりqsortを使用することができました。
(処理がまずかったらしくメモリを破壊しているようなエラーが発生しましたが。)

質問に答えていただきありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)