2 sambocham sambocham 于 2014.12.16 22:34 提问

一个最简单的顺序表,只有构造函数和打印,用数组作为参数,但无法运行

//新建seqlist.h 定义类模板
#ifndef seqlist_h
#define seqlist_h

const int maxsize=10;

template
class Seqlist
{
public:
Seqlist(){length = 0;}
Seqlist(DataType a[],int n);
//~Seqlist();
int Length(){return length;}
void Printlist();
private:
DataType data[maxsize];
int length;
};
#endif
//新建一个seqlist.cpp 定义成员函数
#include
using namespace std;
#include "seqlist.h"

template
Seqlist::Seqlist(DataType a[],int n)
{
if(n>maxsize)throw"参数非法";
for(int i=0;i<n;i++)
data[i]=a[i];
length=n;
}

template
void Seqlist::Printlist()
{
for(i=0;i<n;i++)
cout<<data[i];
}

//新建seqlist_main 定义主函数
#include
using namespace std;
#include "seqlist.h"

void main()
{
int i,z[10];//*p;
cout<<"请输入十个数:";
for(i=0;i cin>>z[i];
//p=z;
Seqlist Seq(z[10],10);

cout<<endl;

}

我个人认为是主函数的数组作为实参传递有问题,但我不知道到底哪里错了,求指教。

4个回答

save4me
save4me   Ds   Rxr 2014.12.22 12:10
已采纳

Seqlist Seq(z[10],10); 改成 Seqlist Seq(z, 10);,你只要传z给函数就可以了,而不是z[10]

 //新建seqlist_main 定义主函数
#include <iostream>
using namespace std;

const int maxsize = 10;

template <class DataType>
class Seqlist
{
    public:
    Seqlist(){length = 0;}
    Seqlist(DataType a[], int n);
    ~Seqlist(){};
    int Length(){return length;}
    void Printlist();

    private:
    DataType data[maxsize];
    int length;
};

template <class DataType>
Seqlist<DataType>::Seqlist(DataType a[], int n)
{
    if(n > maxsize) throw"参数非法";
    for(int i = 0; i < n; i++)
        data[i] = a[i];
    length = n;
 }

template <class DataType>
void Seqlist<DataType>::Printlist()
{
    for(int i = 0; i < length; i++)
    cout<<data[i];
}

int main()
{
    int i, z[10];//*p;
    cout<<"请输入十个数:";
    for(i = 0;i < 10; i++) cin>>z[i];
    //p=z;
    Seqlist<int> Seq(z, 10);
    Seq.Printlist();
    cout<<endl;
}
sambocham
sambocham 回复save4me: 不好意思这段时间学校断网了,没来得及回复你的答案,我运行了一下是可以的 ,虽然不明白为什么可以,但还是谢谢你这段时间的帮助,真的非常感谢。
大约 3 年之前 回复
save4me
save4me 你先不要分文件,把我上面的代码存成一个cpp文件,编译执行一下,看看行不行。我在Dev C++下单文件能编译并运行的。
大约 3 年之前 回复
sambocham
sambocham 我在想是不是那个模板的问题,我对模板不太熟,不确定有没有错
大约 3 年之前 回复
sambocham
sambocham 回复sambocham:
大约 3 年之前 回复
sambocham
sambocham 还是不行,unresolved external symbol "public: __thiscall Seqlist<int>::Seqlist<int>(int * const,int)" (??0?$Seqlist@H@@QAE@QAHH@Z)
大约 3 年之前 回复
save4me
save4me   Ds   Rxr 2014.12.16 22:55

下面的函数里面用了n,但是没用定义,应该是length
void Seqlist::Printlist()
{
for(i=0;i<n;i++)
cout<<data[i];
}

u013451048
u013451048   2014.12.16 23:15

楼上正解,n没有定义

save4me
save4me   Ds   Rxr 2014.12.18 09:24

上面的答案有帮助吗?如果还有问题,请提出来,如果对答案满意,请顶一下,并标记为采纳答案,谢谢!

sambocham
sambocham 我改了,但还是不行,它哪里说什么cannot convert parameter from 'int' to 'int []'
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!