这程序在VC6中编译通过,但VC7不能,何解?

junnyfeng 2004-12-22 05:53:31
#include <iostream>
#include <cstring>
using namespace std;


// 通用的模板定义
template <class T>
T max( T t1, T t2 ) {
return (t1 > t2 ? t1 : t2);
}


// const char* 显式特化:
// 覆盖了来自通用模板定义的实例
typedef const char *PCC;
template<> PCC max<PCC>( PCC s1, PCC s2 ) {

return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}


// 函数模板 max() 的定义以及对 const char* 的特化
int main() {
// 调用实例: int max< int >( int, int );
int i = max( 10, 5 );
// 调用显式特化: const char* max< const char* >( const char*, const char* );
const char *p = max<PCC>( "z", "world" );
cout << "i: " << i << " p: " << p << endl;
return 0;
}

要在VC7运行的话,应该怎么做?
...全文
126 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
junnyfeng 2004-12-22
  • 打赏
  • 举报
回复
to Henry0, 一个是模板对const char *的特化,一个是普通函数。这就是区别
oyljerry 2004-12-22
  • 打赏
  • 举报
回复
max冲突
xubin_sh 2004-12-22
  • 打赏
  • 举报
回复
你最好仔细看看错误信息,错误信息说的很清楚了
你的max和
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(1242): 或 “const _Ty &std::max<int>(const _Ty &,const _Ty &)”
有冲突,在头文件中也包括了max的函数
你只要把你的max改称my_max或者其他什么的就没有问题了
至于为什么vc6没有这个问题,那答案也很简单了,因为vc6的头文件包含方式可以没有包含到这个max函数
北极猩猩 2004-12-22
  • 打赏
  • 举报
回复
不要引入std名称空间,这样你的函数和std:max就不会有冲突了
ilovevc 2004-12-22
  • 打赏
  • 举报
回复
to楼上,我也有此疑问。
看BS的the C++ programming language,中文版Page307说到一个类似的例子:
template<> PCC max<PCC>( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}
可以简化成
template<> PCC max<>( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}

然后又可以简化成
template<> PCC max( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}

我看最后应该可以简化成你上面说的
PCC max( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}

sharkhuang 2004-12-22
  • 打赏
  • 举报
回复
v7什么错误啊?
Henry0 2004-12-22
  • 打赏
  • 举报
回复
template<> PCC max<PCC>( PCC s1, PCC s2 ) {

return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}

能解释一下为什么能这么定义,有什么意义呢?

和下面定义有什么不同?
PCC maxPCC s1, PCC s2 ) {

return ( strcmp( s1, s2 ) > 0 ? s1 : s2 );
}

junnyfeng 2004-12-22
  • 打赏
  • 举报
回复
我知道了,竟然有这种事,但怎么可以继续用max而不出错?或者说怎么VC6不会冲突?
junnyfeng 2004-12-22
  • 打赏
  • 举报
回复
怎么解决呢?
darkstar21cn 2004-12-22
  • 打赏
  • 举报
回复
把自己的函数名就可以通过了
ilovevc 2004-12-22
  • 打赏
  • 举报
回复
VC7不能,何错?
darkstar21cn 2004-12-22
  • 打赏
  • 举报
回复
\VC\include\xutility(2018): or 'const _Ty &std::max<int>(const _Ty &,const _Ty &)'
与这个发生冲突了。
yevv 2004-12-22
  • 打赏
  • 举报
回复
星星

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧