我用VS2010运行老师提供的代码报错:
1> main.cpp 1>h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(23): warning C4244: “参数”: 从“time_t”转换到“unsigned int”,可能丢失数据 1>h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(35): warning C4244: “参数”: 从“time_t”转换到“unsigned int”,可能丢失数据 1>h:\c++\datastructure\mergesort\mergesort\main.cpp(58): error C2896: “void SortTestHelper::testSort(const std::string &,void (__cdecl *)(T [],int),T [],int)”: 不能将函数 模板“void mergeSort(T [],int)”用作函数参数 1> h:\c++\datastructure\mergesort\mergesort\main.cpp(42) : 参见“mergeSort”的声明 1>h:\c++\datastructure\mergesort\mergesort\main.cpp(58): error C2784: “void SortTestHelper::testSort(const std::string &,void (__cdecl *)(T [],int),T [],int)”: 未能从“重载函数类型”为“重载函数类型”推导 模板 参数 1> h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(73) : 参见“SortTestHelper::testSort”的声明 1> 1>生成失败。 1> 1>已用时间 00:00:00.42 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
我试着将testSort调用改成
SortTestHelper::testSort("Merge Sort", mergeSort<int>, arr2, n);
也会报错(之前的selectionSort,insertSort经过这样的修改就不会报错了):
1> main.cpp 1>h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(23): warning C4244: “参数”: 从“time_t”转换到“unsigned int”,可能丢失数据 1>h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(35): warning C4244: “参数”: 从“time_t”转换到“unsigned int”,可能丢失数据 1>d:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2212) : 参见“std::_Copy_impl”的声明 1> h:\c++\datastructure\mergesort\mergesort\sorttesthelper.h(48): 参见对正在编译的函数 模板 实例化“_OutIt std::copy<int[],int*>(_InIt,_InIt,_OutIt)”的引用 1> with 1> [ 1> _OutIt=int *, 1> _InIt=int [] 1> ] 1>h:\c++\datastructure\mergesort\mergesort\main.cpp(14): error C2057: 应输入常量表达式 1> h:\c++\datastructure\mergesort\mergesort\main.cpp(38): 参见对正在编译的函数 模板 实例化“void __merge<T>(T [],int,int,int)”的引用 1> with 1> [ 1> T=int 1> ] 1> h:\c++\datastructure\mergesort\mergesort\main.cpp(44): 参见对正在编译的函数 模板 实例化“void __mergeSort<T>(T [],int,int)”的引用 1> with 1> [ 1> T=int 1> ] 1> h:\c++\datastructure\mergesort\mergesort\main.cpp(58): 参见对正在编译的函数 模板 实例化“void mergeSort<int>(T [],int)”的引用 1> with 1> [ 1> T=int 1> ] 1>h:\c++\datastructure\mergesort\mergesort\main.cpp(14): error C2466: 不能分配常量大小为 0 的数组 1>h:\c++\datastructure\mergesort\mergesort\main.cpp(14): error C2133: “aux”: 未知的大小 1> 1>生成失败。 1> 1>已用时间 00:00:00.50 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
我试着只运行mergeSort(arr1,n);,同样会报上面的错误。
不知道是不是只是我编译器的问题?