鱼C论坛

 找回密码
 立即注册
查看: 2157|回复: 18

[已解决]问一下c++模板类的调用问题

[复制链接]
发表于 2018-3-14 13:26:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#pragma once
#include<iostream>
template<class T>
class LinearList
{
public:
        LinearList(int size);
        ~LinearList();
        void GetElem(T * l, int i, T * e);
protected:
        T *data;
        int length;
        int maxsize;
};
#include"list.h"
#include<iostream>
template<class T>
LinearList<T>::LinearList(int size)
{
        maxsize = size;
        length = 0;
        data = new T[maxsize];
        if (data == 0)
        {
                std::cerr << "存储分配错误!"; << std::endl;
                exit(1);
        }
}
template<class T>
LinearList<T>::~LinearList()
{
        delete[] data;
}
//template<class T>
// void LinearList<T>::GetElem(T *l, int i, T *e)
//{
//        *e = l[i - 1];
//}
#include"list.h"
#include<iostream>

int main(void)
{
        LinearList list;
        
        return 0;
}
最佳答案
2018-3-16 17:30:56

简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-14 13:27:34 | 显示全部楼层
不能像普通类一样用 LinearList list;声明 请问要用怎样的格式声明
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 13:50:31 | 显示全部楼层
声明的时候需要指明用哪种类型的数据,比如
LinearList<int> list; //对应T为int类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:03:01 | 显示全部楼层
BngThea 发表于 2018-3-14 13:50
声明的时候需要指明用哪种类型的数据,比如
LinearList list; //对应T为int类型

捕获.PNG 捕获1.PNG 还是不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 17:15:00 | 显示全部楼层

你没有写默认构造函数,只写了一个带一个参数的构造函数,实例化的时候需要传初值
LinearList<int> list(5);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:23:57 | 显示全部楼层
BngThea 发表于 2018-3-14 17:15
你没有写默认构造函数,只写了一个带一个参数的构造函数,实例化的时候需要传初值
LinearList list(5);

捕获.PNG 捕获1.PNG 呃。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 17:25:15 | 显示全部楼层
其实这些我都试过,就是看不懂最后这个报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 20:00:14 | 显示全部楼层
未灭时间 发表于 2018-3-14 17:25
其实这些我都试过,就是看不懂最后这个报错


//std::cerr << "存储分配错误!"; << std::endl;
std::cerr << "存储分配错误!" << std::endl;


#include<iostream>

template<class T>
class LinearList
{
public:
        LinearList(int size);
        ~LinearList();
        void GetElem(T * l, int i, T * e);
protected:
        T * data;
        int length;
        int maxsize;
};

template<class T>
LinearList<T>::LinearList(int size)
{
        maxsize = size;
        length = 0;
        data = new T[maxsize];
        if(data == 0)
        {
                //std::cerr << "存储分配错误!"; << std::endl;
                std::cerr << "存储分配错误!" << std::endl;
                exit(1);
        }
}

template<class T>
LinearList<T>::~LinearList()
{
        delete[] data;
}
//template<class T>
// void LinearList<T>::GetElem(T *l, int i, T *e)
//{
//        *e = l[i - 1];
//}


int main(void)
{
        LinearList<int> list(10);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 21:52:49 | 显示全部楼层

改了,还是一样的报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 22:15:19 | 显示全部楼层
未灭时间 发表于 2018-3-15 21:52
改了,还是一样的报错

我需要错误信息

在我这边正常
$ ls
main.cpp
$ cat main.cpp
#include<iostream>

template<class T>
class LinearList
{
public:
        LinearList(int size);
        ~LinearList();
        void GetElem(T * l, int i, T * e);
protected:
        T * data;
        int length;
        int maxsize;
};

template<class T>
LinearList<T>::LinearList(int size)
{
        maxsize = size;
        length = 0;
        data = new T[maxsize];
        if(data == 0)
        {
                //std::cerr << "存储分配错误!"; << std::endl;
                std::cerr << "存储分配错误!" << std::endl;
                exit(1);
        }
}

template<class T>
LinearList<T>::~LinearList()
{
        delete[] data;
}
//template<class T>
// void LinearList<T>::GetElem(T *l, int i, T *e)
//{
//        *e = l[i - 1];
//}


int main(void)
{
        LinearList<int> list(10);

        return 0;
}

$ g++ main.cpp
$ ls
a.out  main.cpp
$ 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-15 23:01:25 | 显示全部楼层
人造人 发表于 2018-3-15 22:15
我需要错误信息

在我这边正常

捕获1.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 23:04:40 | 显示全部楼层

这样看不出什么
我需要一个完整的截图
如果可以,截一下整个vs窗口的截图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 13:01:59 | 显示全部楼层
人造人 发表于 2018-3-15 23:04
这样看不出什么
我需要一个完整的截图
如果可以,截一下整个vs窗口的截图

捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 13:31:43 | 显示全部楼层

好了,现在可以贴代码了,那三个文件都贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:46:11 | 显示全部楼层
#pragma once
#include<iostream>
template<class T>
class LinearList
{
public:
        LinearList(int size);
        ~LinearList();
        
protected:
        T *data;
        int length;
        int maxsize;
};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:49:15 | 显示全部楼层
#include"list.h"
#include<iostream>
template<class T>
LinearList<T>::LinearList(int size)
{
        maxsize = size;
        length = 0;
        data = new T[maxsize];
        if (data == 0)
        {
                std::cerr << "存储分配错误!" << std::endl;
                exit(1);
        }
}

template<class T>
LinearList<T>::~LinearList()
{
        delete[] data;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 16:49:50 | 显示全部楼层
人造人 发表于 2018-3-16 13:31
好了,现在可以贴代码了,那三个文件都贴出来
#include"list.h"
#include<iostream>

int main(void)
{
        LinearList<int> list(100);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-16 17:30:56 | 显示全部楼层    本楼为最佳答案   

简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-16 19:49:46 | 显示全部楼层
人造人 发表于 2018-3-16 17:30
简单来说,就是 声明和定义不能分开
刚刚看了前三篇文章,有兴趣的话,自己研究

谢谢,我去看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 17:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表