读书人

关于C++模块的求教,该如何处理

发布时间: 2012-03-09 21:42:55 作者: rapoo

关于C++模块的,求教

C/C++ code
#ifndef MYLIST_HPP#define MYLIST_HPP#include <memory>template<typename T>class CMyList{private:    // 结点    struct stNode     {        stNode(){memset(this, 0, sizeof(stNode));}        T        data;    // 数据        stNode* pNext;    // 下一结点        stNode* pPre;    // 上一结点    private:        stNode(const stNode& rhs);        stNode& operator=(const stNode& rhs);    };public:    // 迭代器    class CIteaator    {        friend class CMyList<T>;    public:        CIteaator(stNode* pData = NULL) : m_pData(pData) {}        ~CIteaator(){m_pData = NULL;}        T& operator *(){return m_pData->data;}        T* operator ->(){return &(m_pData->data);}        const T& operator *()const{return m_pData->data;}        const T* operator ->()const{return &(m_pData->data);}        CIteaator& operator++(){m_pData = m_pData->pNext; return *this;}        CIteaator operator++(int){CIteaator temp = *this; m_pData = m_pData->pNext; return temp;}        bool operator ==(const CIteaator& rhs)const{return rhs.m_pData == m_pData;}        bool operator !=(const CIteaator& rhs)const{return rhs.m_pData != m_pData;}    private:        stNode*    m_pData;    };    typedef CIteaator iterator;    typedef const CIteaator const_iterator;public:    CMyList(void){m_pHead = m_pEnd = new stNode;m_size = 0;}    ~CMyList(void){clear(); delete m_pEnd; m_pHead = m_pEnd = NULL;}    iterator begin()const{return iterator(m_pHead);}    iterator end()const{return iterator(m_pEnd);}    size_t size()const{return m_size;}    bool empty()const{return m_size == 0;}    iterator push_back(const T& value);    iterator erase(const iterator& it);    void clear();private:    CMyList(const CMyList& rhs);    CMyList& operator=(const CMyList& rhs);private:    stNode*        m_pHead;    // 表头    stNode*        m_pEnd;        // 表尾    size_t        m_size;        // 元素个数};template<typename T>CMyList<T>::iterator<T> CMyList<T>::push_back(const T& value){    stNode* pNode = new stNode;    pNode->data = value;    pNode->pPre = m_pEnd->pPre;    pNode->pNext = m_pEnd;    if (0 == m_size++)    {        m_pHead = pNode;    }    else    {        m_pEnd->pPre->pNext = pNode;    }    m_pEnd->pPre = pNode;    return iterator(pNode);}template<typename T>CMyList<T>::iterator<T> CMyList<T>::erase(const iterator& it){    if (it == end())    {        return end();    }    if (it == begin())    {        stNode* pTemp = m_pHead;        m_pHead = m_pHead->pNext;        m_pHead->pPre = NULL;        delete pTemp;        --m_size;        return iterator(m_pHead);    }    stNode* pTemp = it.m_pData->pNext;    pTemp->pPre = it.m_pData->pPre;    if (NULL != it.m_pData->pPre)    {        it.m_pData->pPre->pNext = pTemp;    }    else    {        m_pHead = pTemp;    }    delete it.m_pData;    --m_size;    return iterator(pTemp);}template<typename T>void CMyList<T>::clear(){    stNode* pNode = m_pHead;    while (pNode != m_pHead)    {        stNode* pTemp = pNode->pNext;        delete pNode;        pNode = pTemp;    }    m_size = 0;    m_pHead = m_pEnd;}#endif


类外的那三个函数有问题,把他们移到类的内部是没问题的,请问我应该怎么改它们
多谢!!

[解决办法]
template<typename T>
typename CMyList<T>::iterator<T> CMyList<T>::push_back(const T& value)


所有的都加上
[解决办法]
大概讲一下
C/C++ code
template<typename T> class A{ typedef int INT;} //在这个类版中 INT是类型template<typename T> class A{ enum {INT};}//在这个类模板中 INT是值 


[解决办法]

C/C++ code
#ifndef MYLIST_HPP#define MYLIST_HPP#include <memory>template<typename T>class CMyList{private:    // 结点    struct stNode     {        stNode(){memset(this, 0, sizeof(stNode));}        T        data;    // 数据        stNode* pNext;    // 下一结点        stNode* pPre;    // 上一结点    private:        stNode(const stNode& rhs);        stNode& operator=(const stNode& rhs);    };public:    // 迭代器    class CIteaator    {        friend class CMyList<T>;    public:        CIteaator(stNode* pData = NULL) : m_pData(pData) {}        ~CIteaator(){m_pData = NULL;}        T& operator *(){return m_pData->data;}        T* operator ->(){return &(m_pData->data);}        const T& operator *()const{return m_pData->data;}        const T* operator ->()const{return &(m_pData->data);}        CIteaator& operator++(){m_pData = m_pData->pNext; return *this;}        CIteaator operator++(int){CIteaator temp = *this; m_pData = m_pData->pNext; return temp;}        bool operator ==(const CIteaator& rhs)const{return rhs.m_pData == m_pData;}        bool operator !=(const CIteaator& rhs)const{return rhs.m_pData != m_pData;}    private:        stNode*    m_pData;    };    typedef CIteaator iterator;    typedef const CIteaator const_iterator;public:    CMyList(void){m_pHead = m_pEnd = new stNode;m_size = 0;}    ~CMyList(void){clear(); delete m_pEnd; m_pHead = m_pEnd = NULL;}    iterator begin()const{return iterator(m_pHead);}    iterator end()const{return iterator(m_pEnd);}    size_t size()const{return m_size;}    bool empty()const{return m_size == 0;}    iterator push_back(const T& value);    iterator erase(const iterator& it);    void clear();private:    CMyList(const CMyList& rhs);    CMyList& operator=(const CMyList& rhs);private:    stNode*        m_pHead;    // 表头    stNode*        m_pEnd;        // 表尾    size_t        m_size;        // 元素个数};template<typename T>typename CMyList<T>::iterator CMyList<T>::push_back(const T& value){    stNode* pNode = new stNode;    pNode->data = value;    pNode->pPre = m_pEnd->pPre;    pNode->pNext = m_pEnd;    if (0 == m_size++)    {        m_pHead = pNode;    }    else    {        m_pEnd->pPre->pNext = pNode;    }    m_pEnd->pPre = pNode;    return iterator(pNode);}template<typename T>typename CMyList<T>::iterator CMyList<T>::erase(const iterator& it){    if (it == end())    {        return end();    }    if (it == begin())    {        stNode* pTemp = m_pHead;        m_pHead = m_pHead->pNext;        m_pHead->pPre = NULL;        delete pTemp;        --m_size;        return iterator(m_pHead);    }    stNode* pTemp = it.m_pData->pNext;    pTemp->pPre = it.m_pData->pPre;    if (NULL != it.m_pData->pPre)    {        it.m_pData->pPre->pNext = pTemp;    }    else    {        m_pHead = pTemp;    }    delete it.m_pData;    --m_size;    return iterator(pTemp);}template<typename T>void CMyList<T>::clear(){    stNode* pNode = m_pHead;    while (pNode != m_pHead)    {        stNode* pTemp = pNode->pNext;        delete pNode;        pNode = pTemp;    }    m_size = 0;    m_pHead = m_pEnd;}#endif 

读书人网 >C++

热点推荐