免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2027 | 回复: 4
打印 上一主题 下一主题

一个在模板类中使用list的问题,连接不通过,请高手指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-21 16:14 |只看该作者 |倒序浏览
#ifndef COMMLIST_H_
#define COMMLIST_H_
#include <list>
using std::list;

template <class T>
class CInfoList
{
public:
        CInfoList();
        ~CInfoList();
public:
        void AddTail(T *tip);
        T* GetHead(bool remove);
        void Clear();
private:
        //CriticSection listlock;
        std::list<T> infolist;
};
#endif
//-----------------------------------------------------------------------------------------
#include "commlist.h"
template <class T>
CInfoList<T>::CInfoList()
{
}

template <class T>
CInfoList<T>::~CInfoList()
{
        Clear();
}

template <class T>
T *CInfoList<T>::GetHead(bool remove)
{
        if (infolist.empty())
                return NULL;
        T  *ret_val;
        if (remove==true)
        {
                ret_val = infolist.front();
                infolist.pop_front();
        }
        return ret_val;
}

template <class T>
void CInfoList<T>::AddTail(T *tip)
{
        infolist.push_back(tip);

}

template <class T>
void CInfoList<T>::Clear()
{
        typename list<T*>::iterator info_iter = infolist.begin();
        for (; info_iter!=infolist.end(); info_iter++)
        {
                delete &*info_iter;
        }
        infolist.clear();
       
}
//---------------------------------------------------------------------------------------------------
#include "commlist.h"

int main()
{
        CInfoList<int> infolist;
        int i = 100;
       
        infolist.AddTail(&i);
        infolist.GetHead(true);
        return (0);
}
//-------------------------------------------------------------------------------------------------------
为什么在main中调用模板类为有连接的问题呢...请高手指点.错误如下:
//-------------------------------------------------------------------------------------------------------
--------------------Configuration: LockList - Debug--------------------
Compiling source file(s)...
CommList.cpp
Main.cpp
Linking...
D:\MinGWStudio\workspace\LockList\Debug\Main.o: In function `main':
D:\MinGWStudio\workspace\LockList\Main.cpp:5: undefined reference to `CInfoList<int>::CInfoList()'
D:\MinGWStudio\workspace\LockList\Main.cpp:8: undefined reference to `CInfoList<int>::AddTail(int*)'
D:\MinGWStudio\workspace\LockList\Main.cpp:9: undefined reference to `CInfoList<int>::GetHead(bool)'
D:\MinGWStudio\workspace\LockList\Main.cpp:10: undefined reference to `CInfoList<int>::~CInfoList()'
D:\MinGWStudio\workspace\LockList\Main.cpp:10: undefined reference to `CInfoList<int>::~CInfoList()'
collect2: ld returned 1 exit status

[ 本帖最后由 lyrix_z 于 2006-3-21 16:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-03-21 16:36 |只看该作者
没有仔细看你的代码,把你的三个文件合成一个文件编译之后发现你有一个地方不太明确,我怀疑怎么能编译过去呢?应该是在编译期间就报错的了,这个地方:

std::list<T> infolist;
和这里是矛盾的:
typename list<T*>::iterator info_iter = infolist.begin();

到底你的模板参数是T还是T*呢?

论坛徽章:
0
3 [报告]
发表于 2006-03-21 16:40 |只看该作者

回复 2楼 converse 的帖子

对..是我写错了...呵呵..改过来也还是报同样的问题...

论坛徽章:
0
4 [报告]
发表于 2006-03-21 17:06 |只看该作者
原帖由 lyrix_z 于 2006-3-21 16:14 发表
#ifndef COMMLIST_H_
#define COMMLIST_H_
#include <list>
using std::list;

template <class T>
class CInfoList
{
public:
        CInfoList();
        ~CInfoList();
public:
        void AddTail(T * ...

把函数的实现写在类的里面就能通过!!汗!!

论坛徽章:
0
5 [报告]
发表于 2006-03-21 17:11 |只看该作者
要改的地方太多了,比如:

  1. template <class T>
  2. T *CInfoList<T>::GetHead(bool remove)
  3. {
  4.         if (infolist.empty())
  5.                 return NULL;
  6.         T  *ret_val;
  7.         if (remove==true)
  8.         {
  9.                 ret_val = infolist.front();
  10.                 infolist.pop_front();
  11.         }
  12.         return ret_val;
  13. }

  14. template <class T>
  15. void CInfoList<T>::AddTail(T *tip)
  16. {
  17.         infolist.push_back(tip);

  18. }
复制代码


一会是指针,一会是值....
你还是先把三个文件合成在一个文件中可以编译过去再来解决链接的问题吧.

PS:把你的代码code一下,方便他人,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP