BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #84690同步于 2014/12/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

c++primer中的538页的最下面的例子和572页的中间的那个compare

lfny
2014/12/9镜像同步17 回复
c++primer中的538页的最下面的例子和572页的中间的那个compare(ch_arre1,cn_arre2)解释的是完全相反的 ,下面的两个图片为什么第一个对了,第二个就错了,都是数组啊??? 求解释啊
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
lfny机器人#1 · 2014/12/9
不该普通函数,就是为什么int型不能用在那个函数模板上 【 在 FromSixToTen 的大作中提到: 】 : 把函数定义改成这样:int compare(char *,char *)
lfny机器人#2 · 2014/12/9
你不能主观去掉我上面模板中的&符号啊,关键点就在这个符号上面,你还去掉了[em9] 【 在 FromSixToTen 的大作中提到: 】 : 写了一个例子,没有问题呀,不明白你说的什么意思。 : [upload=1][/upload]
lfny机器人#3 · 2014/12/9
重新编译就错了,就是我上面的那个图片 【 在 FromSixToTen 的大作中提到: 】 : 改成int compare(const Type& a,const Type& b)重新编译一下就行了。
buptxrc机器人#4 · 2014/12/9
别听楼上的。。。换gcc还是会告诉你编译错误。。不信你试试。 之所以编译错误是因为 int a[12], b[24]; a和b不是一个类型(为什么?自己查咯) 所以不能匹配模版函数 int compare(const T&, const T&) 然后编译器试图让你匹配普通函数 int compare(const char* , const char*) 然后就报出了你所述的错误。 【 在 lfny 的大作中提到: 】 : 重新编译就错了,就是我上面的那个图片 :
inaadversity机器人#5 · 2014/12/9
他的a,b长度是一样的所以不会错。。。 如果模板参数是引用类型,并且,调用时传入的是数组类型,就是你的a[10]和b[42],那不能产生新的实例化 原因是,compare(a,b)的两个实参类型不一致,一个是 int &[10],一个是int &[42]。所以第二个图是错的 那如果模板参数是非引用类型,对于compare(a,b)这样的调用,有两个选择:1,调用普通版本,2,T绑定到 int *的模板版本,但是你的例子中没有对应int *的普通版本,只能调用模板版本。
sxy0322机器人#6 · 2014/12/9
选择“项目”--->“XXX项目属性”--->“配置属性”--->“常规”选项中,把“字符集”改为“使用多字节字符集”,然后确定。
lfny机器人#7 · 2014/12/10
那个arr1和arr2也不是一个类型啊,怎么就行呢!这是问题的关键 【 在 buptxrc 的大作中提到: 】 : 别听楼上的。。。换gcc还是会告诉你编译错误。。不信你试试。 : 之所以编译错误是因为 : int a[12], b[24]; : ...................
lfny机器人#8 · 2014/12/10
那个arr1 和arr2也是不一样长的的啊,只不过ab是int型,arr1和2是字符型啊,没有其他的区别啊,为啥arr1和2就行呢 【 在 inaadversity 的大作中提到: 】 : 他的a,b长度是一样的所以不会错。。。 : 如果模板参数是引用类型,并且,调用时传入的是数组类型,就是你的a[10]和b[42],那不能产生新的实例化 : 原因是,compare(a,b)的两个实参类型不一致,一个是 int &[10],一个是int &[42]。所以第二个图是错的 : ...................
lfny机器人#9 · 2014/12/10
arr1和2用的是模板函数,不是普通函数,而且还能通过,但是ab就不行为啥 【 在 lfny 的大作中提到: 】 : 那个arr1 和arr2也是不一样长的的啊,只不过ab是int型,arr1和2是字符型啊,没有其他的区别啊,为啥arr1和2就行呢