C++问题,求大神解答

tlxlg 2014-08-21 10:25:33
#include <iostream>
using namespace std;

//获取数组的长度
template <typename T>
int getArrayLenth(T& tArray){
return (sizeof(tArray)/sizeof(tArray[0]));
}

int main(){
int b[10];
for(int index=0;index<getArrayLenth(b);index++){
cin>>b[index];
}
cout<<endl;
void selectSort(int b[]);
selectSort(b);

int w;
cin>>w;
return 0;
}

void selectSort(int &b){
for(int index=0;index<getArrayLenth(b)-1;index++){
for(int index1=index+1;index1<getArrayLenth(b);index1++){
if(b[index]>b[index1]){
int temp=b[index];
b[index]=b[index1];
b[index1]=temp;
}
}
}
for(int index=0;index<getArrayLenth(b);index++){
cout<<b[index];
}
}


问题所在: if(b[index]>b[index1]){
int temp=b[index];
b[index]=b[index1];
b[index1];
}
中b[index]处为什么会出现表达式必须包含指向对象的指针的错误,请问这是什么原因?
为什么我把selectSort函数写成模板函数就不会出现这样的问题

c++新学,望大神能解答我的疑惑
...全文
189 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tlxlg 2014-08-23
  • 打赏
  • 举报
回复
十分感谢,明白了!
Falleyes 2014-08-22
  • 打赏
  • 举报
回复
void selectSort(int &b)
这个函数声明表示b参数是引用,你传递的是数组地址,那么函数声明应该改为:
void selectSort(int* b)
或者:
void selectSort(int b[])
AdrianHust 2014-08-22
  • 打赏
  • 举报
回复
void selectSort(int &b) 写错了 应该为 void selectSort(int b[])
Falleyes 2014-08-22
  • 打赏
  • 举报
回复
引用 4 楼 u010221693 的回复:
但是我想在selectSort中求数组的长度啊,用b[]或者*b不是会发生数组退化为指针么。 为什么我写成: template <typename T> void selectSort(T &b){ for(int index=0;index<getArrayLenth(b)-1;index++){ for(int index1=index+1;index1<getArrayLenth(b);index1++){ if(b[index]>b[index1]){ int temp=b[index]; b[index]=b[index1]; b[index1]=temp; } } } 就会成功呢?求大神解答
在这里,运行时T的类型是int [10],也就是说你实际调用相当于void selectSort(int &b[]),是对数组的引用。 如果你写成void selectSort(int &b),这是对一个整形变量的引用,是完全不一样的。
tlxlg 2014-08-22
  • 打赏
  • 举报
回复
但是我想在selectSort中求数组的长度啊,用b[]或者*b不是会发生数组退化为指针么。 为什么我写成: template <typename T> void selectSort(T &b){ for(int index=0;index<getArrayLenth(b)-1;index++){ for(int index1=index+1;index1<getArrayLenth(b);index1++){ if(b[index]>b[index1]){ int temp=b[index]; b[index]=b[index1]; b[index1]=temp; } } } 就会成功呢?求大神解答
loong0306 2014-08-21
  • 打赏
  • 举报
回复
void selectSort(int &b)。这是不是引用b的地址 进行传参。

64,637

社区成员

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

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