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

可以写个动态大小的数组指针吗?

vinci
2009/12/29镜像同步20 回复
int a[]={1,2,3,4}; 写个求数组之和的函数 SumOfArray 里面 (1)需要计算数组的大小 发现如果直接用 SumOfArray(int A[]) 使用sizeof(A)只能得到A的地址的大小 故使用数组指针 int SumOfrray(int (*A)[4]);//这时使用n=sizeof(*A);可以得到数组的大小 但这只能满足4个元素的数组,[em2] 有什么方法可以既解决了(2)又能适应所有大小的数组指针?? ***************************************************** 另外还有一个C++模板的问题 想请教下 在Dev下 声明了如下一个函数 template <class T > Seqlist <T>::Seqlist(T a[],int len) 在main 里调用 int a[2]={0,1}; Seqlist <int> sl(a,2); // 但是提示 [Linker Error] undefined reference to `Seqlist<int>::Seqlist(int*, int)' 这个如何解决?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
vinci机器人#1 · 2009/12/29
哈 (1) 解决了还是得用模板~ template<typename T,size_t N> T Sumofarray_ArrPrt( T (*A)[N]) { T m,n,b,sum; b=sum=0; m=sizeof(*A)/sizeof(*A[0]); cout<<"the size of a[] in the ArrPrt: "<<m<<endl; n=sizeof(*A); cout<<"*A="<<n<<endl; for(;b<m;b++) { sum=sum+(*A)[b]; } return sum; }; =. = Dev的问题谁能告诉我?
Vampire机器人#2 · 2009/12/29
1. int SumOfArray(int *array, int size); 2. #include <iostream> using namespace std; template <class T> class Foo { public: Foo(T a[], int len); }; template <class T> Foo<T>::Foo(T a[], int len) { cout << "done" << endl; } int main() { int a[] = {1, 2, 3}; Foo<int> obj(a, 10); return 0; } 貌似没有问题啊
vinci机器人#3 · 2009/12/29
1 不行吧 传入是整数指针,无法用sizeof 计算出整个数组的大小(我程序里定义了个MaxSize,而用 size表示实际已经赋值的数组大小,故还是需要先计算一次数组分配的空间大小保证不超过MaxSize) 2 我编译时没有语法错误,不过Dev就是给出个linkError... 【 在 Vampire 的大作中提到: 】 : 1. int SumOfArray(int *array, int size); : 2. : #include <iostream> : ...................
jokerlee机器人#4 · 2009/12/29
【 在 vinci 的大作中提到: 】 : 1 不行吧 传入是整数指针,无法用sizeof 计算出整个数组的大小(我程序里定义了个MaxSize,而用 size表示实际已经赋值的数组大小,故还是需要先计算一次数组分配的空间大小保证不超过MaxSize) : 2 我编译时没有语法错误,不过Dev就是给出个linkError... 都把大小传进去了, sizeof还有什么意义? 非要用的话就强制类型转换
coolwc机器人#5 · 2009/12/29
第二个问题 你光声明了 没实现吧
vinci机器人#6 · 2009/12/29
template <typename T > Seqlist <T>::Seqlist(const T a[],int len) { if(len>Maxsize) throw "超过最大长度" ; for(int i=0;i<len;i++) { data[i]=a[i]; } length=len; } 我坚决不会犯这种错误~~ 哦 const 和 tpyename 是后来调试改的 里面也修改了 哎 就是过不去 。。。 【 在 coolwc 的大作中提到: 】 : 第二个问题 你光声明了 没实现吧
coolwc机器人#7 · 2009/12/29
给出完整程序 帮你调通
vinci机器人#8 · 2009/12/29
\(^o^)/~ 小包 就“包”在你身上啦~~~ //Seqlist.h ///#include <stdio.h> const int Maxsize=100; template <typename T> class Seqlist { private: T data[Maxsize]; int length; public: Seqlist():length(0){} Seqlist(const T a[],int len); ~Seqlist(){} int Length(){return length;} }; //main.cpp #include <cstdlib> #include <iostream> #include "Seqlist.h" using namespace std; int main(int argc, char *argv[]) { int a[]={0,1}; Seqlist <int> sl(a,2); system("PAUSE"); return EXIT_SUCCESS; }
Vampire机器人#9 · 2009/12/29
构造函数木有实现…… =。=。=。=。=。=。=