none
关于C++primer(第5版)的一个问题 RRS feed

  • 问题

  • #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页

    2014年3月31日 9:01

答案

全部回复

  • 你好:

    我现在手边没有《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;
    }
    

    这下面是结果截图:

    2014年4月1日 6:24
    版主
  • ?????

    2014年4月1日 8:04