积极答复者
关于C++primer(第5版)的一个问题

问题
-
#include<functional>
#include<iostream>
#include<vector>
using namespace std;
template <typename T>
int compare( const T &v1 , const T &v2 )
{
if( less<T>()(v1 < v2) )return -1;
if( less<T>()(v2 < v1) )return 1;
return 0;
}
int main()
{
int *p1 , *p2;
int a1[10];
p1 = a1;
p2 = a1;
cout << compare( p1,p2 ) << endl;
}请问这段代码为什么在VS2013.1中无法通过?是不是因为VS2013还不能很好的支持C++11标准?好郁闷呀!
VS2013.1给出的信息:
1>------ 已启动生成: 项目: 581, 配置: Debug Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(381,5): warning MSB8028: The intermediate directory (Debug\) contains files shared from another project (ConsoleApplication1.vcxproj). This can lead to incorrect clean and rebuild behavior.
1> 源.cpp
1>c:\users\鸿霸天下\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\源.cpp(8): error C2064: 项不会计算为接受 1 个参数的函数
1> 类不会将“operator()”或用户定义的转换运算符定义到指向函数的指针或指向函数的引用(它们接受适当数量的参数)
1> c:\users\鸿霸天下\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\源.cpp(18): 参见对正在编译的函数 模板 实例化“int compare<int*>(const T &,const T &)”的引用
1> with
1> [
1> T=int *
1> ]
1>c:\users\鸿霸天下\documents\visual studio 2013\projects\consoleapplication1\consoleapplication1\源.cpp(9): error C2064: 项不会计算为接受 1 个参数的函数
1> 类不会将“operator()”或用户定义的转换运算符定义到指向函数的指针或指向函数的引用(它们接受适当数量的参数)
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========注:该代码的出处:《C++primer(第5版)(中文版)》第581页
答案
全部回复
-
你好:
我现在手边没有《C++primer(第5版)(中文版)》这本书。
你可以用下面的代码:
#include "stdafx.h" #include<functional> #include<iostream> #include<vector> using namespace std; template <typename T> int compare(const T &v1, const T &v2) { /*if (less<T>()(v1 < v2)) return -1; if (less<T>()(v2 < v1)) return 1; return 0;*/ if (v1 < v2) return -1; if (v2 > v1) return 1; return 0; } int main() { int *p1, *p2; int a1[10]; p1 = a1; p2 = a1; cout << compare(p1, p2) << endl; }
这下面是结果截图: