返回信息流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)'
这个如何解决?
这是一条镜像帖。来源:北邮人论坛 / cpp / #34482同步于 2009/12/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
可以写个动态大小的数组指针吗?
vinci
2009/12/29镜像同步20 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
哈 (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的问题谁能告诉我?
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;
}
貌似没有问题啊
1 不行吧 传入是整数指针,无法用sizeof 计算出整个数组的大小(我程序里定义了个MaxSize,而用 size表示实际已经赋值的数组大小,故还是需要先计算一次数组分配的空间大小保证不超过MaxSize)
2 我编译时没有语法错误,不过Dev就是给出个linkError...
【 在 Vampire 的大作中提到: 】
: 1. int SumOfArray(int *array, int size);
: 2.
: #include <iostream>
: ...................
【 在 vinci 的大作中提到: 】
: 1 不行吧 传入是整数指针,无法用sizeof 计算出整个数组的大小(我程序里定义了个MaxSize,而用 size表示实际已经赋值的数组大小,故还是需要先计算一次数组分配的空间大小保证不超过MaxSize)
: 2 我编译时没有语法错误,不过Dev就是给出个linkError...
都把大小传进去了, sizeof还有什么意义?
非要用的话就强制类型转换
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 的大作中提到: 】
: 第二个问题 你光声明了 没实现吧
\(^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;
}