⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_32972.htm

📁 vc
💻 HTM
字号:
<p>
序号:32972 发表者:傅杰 发表日期:2003-03-17 00:16:44
<br>主题:求助-模板排序
<br>内容:我想把模板和qsort函数联合生成一个可以对任意类型数组排序的函数,程序如下所示:<BR><BR>#include &lt;search.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;iostream.h&gt;<BR><BR>int compare( const void *arg1, const void *arg2);<BR>template &lt;class SortT&gt;<BR>void MySort(SortT* OrgArray,int n)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;qsort((void*)OrgArray,n,sizeof(SortT),compare);<BR>}<BR>template &lt;class SortT&gt;<BR>int compare( const void *arg1, const void *arg2)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (int)(*(SortT*)arg1)-*(SortT*)arg2);<BR>}<BR>void main(int argc, char* argv[])<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;int iArray[]={5,4,7,10,23,36};<BR>&nbsp;&nbsp;&nbsp;&nbsp;double dArray[]={23.5,87.3,0,-45.7,23.9,-2.5};<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySort(iArray,6);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySort(dArray,6);<BR>}<BR><BR>程序的错误如下:<BR>tmplatesort.obj : error LNK2001: unresolved external symbol "int __cdecl compare(void const *,void const *)" (?compare@@YAHPBX0@Z)<BR>Debug/tmplatesort.exe : fatal error LNK1120: 1 unresolved externals<BR>Error executing link.exe.<BR><BR>但如果我交换compare和模板的声明,它又会提示SortT没有定义。不知道如何更改才能写成满足对任意类型数组排序的模板函数。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:mr_oydy 回复日期:2003-03-17 19:03:38
<br>内容://程序修改如下:<BR>#include &lt;search.h&gt;<BR>#include &lt;stdlib.h&gt;<BR>#include &lt;iostream.h&gt;<BR><BR><BR>template &lt;class SortT&gt;<BR>class Compare{<BR>typedef int (*FUNC)(const void*, const void*);<BR>static int compare( const void *arg1, const void *arg2){<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (int)(*(SortT*)arg1)-(*(SortT*)arg2);<BR>}<BR>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;operator FUNC(){return compare;}<BR>};<BR><BR>template &lt;class SortT&gt;<BR>void MySort(SortT* OrgArray,int n){<BR>&nbsp;&nbsp;&nbsp;&nbsp;qsort((void*)OrgArray,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(SortT), <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compare&lt;SortT&gt;());<BR>}<BR><BR><BR><BR>#define ArrLen(Name) sizeof(Name)/sizeof(Name[0])<BR><BR>void main(int argc, char* argv[]){<BR>&nbsp;&nbsp;&nbsp;&nbsp;int iArray[]={5,4,7,10,23,36};<BR>&nbsp;&nbsp;&nbsp;&nbsp;double dArray[]={23.5,87.3,0,-45.7,23.9,-2.5};<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySort(iArray,6);<BR>&nbsp;&nbsp;&nbsp;&nbsp;MySort(dArray,6);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int i;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;ArrLen(iArray); i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; iArray[i] &lt;&lt; '\t';<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0; i&lt;ArrLen(dArray); i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; dArray[i] &lt;&lt; '\t';<BR>&nbsp;&nbsp;&nbsp;&nbsp;cout &lt;&lt; endl;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -