Hol*_*lly 0 c++ templates compiler-errors compilation
我正在尝试创建自己的模板化List类作为练习练习.我应该可能已经开始变小了但是你去了......我得到的错误是"在''''''''''''''''''''''''''''''''''''''''''
typedef <typename ListType>
Run Code Online (Sandbox Code Playgroud)
我是一名学生,我已经阅读了几个小时的模板,但仍然无法想象这一个,任何帮助将不胜感激!
我的列表的hpp文件:
#if !defined _LIST_HPP_
#define _LIST_HPP_
#include "Node.hpp"
///since we're creating a template everything must be defined in the hpp
typedef <typename ListType>
class List
{
public:
List();
bool Empty();
void PushFront();
void PushBack();
void PopBack();
Node<ListType>& GetHead();
private:
int _size;
Node<ListType>* _head;
Node<ListType>* _tail;
};
///implement List class here
typedef <typename ListType>
List<ListType>::List() : _head(0), _tail(0), _size(0)
{
}
typedef <typename ListType>
bool <ListType>Empty()
{
return !_size; //returns true if size = 0
}
typedef <typename ListType>
void List<ListType>::PushFront()
{
_head = new Node<ListType>( _head , 0 );
if (!Empty())
_head->_prev->_next = _head; //set previous nodes _next to new _head
++_size;
}
typedef <typename ListType>
void List<ListType>::PushBack()
{
_tail = new Node<ListType>( 0 , _tail);
if (!Empty())
_tail->_next->_prev = _tail; // set old tails _prev to new tail
++_size;
}
typedef <typename ListType>
void List<ListType>::PopBack()
{
}
typedef <typename ListType>
Node<ListType>& List<ListType>::GetHead()
{
return _head;
}
#endif //define
Run Code Online (Sandbox Code Playgroud)
而且我还会包含模板化的节点类hpp,因为它可能会让那些东西丢掉?
#if !defined _NODE_HPP_
#define _NODE_HPP_
//#include "Sprite.hpp"
template<typename NodeType>
class Node{
public:
Node( Node* prev = 0, Node* next = 0);
void SetData(NodeType newData);
void GetData();
private:
friend class List;
NodeType _data;
Node* _next;
Node* _prev;
};
///implement Node
template <typename NodeType>
Node<NodeType>::Node(Node* prev, Node* next) : _prev(prev), _next(next)
{}
template <typename NodeType>
void Node<NodeType>::SetData(NodeType newData)
{
_data = newData;
}
template <typename NodeType>
void Node<NodeType>::GetData()
{
return _data;
}
#endif //define
Run Code Online (Sandbox Code Playgroud)
这template,不是typedef.
虽然我们在它,但是你的预处理器令牌是无效的标识符,因为它们以下划线开头,这里不允许这样做.使用类似的东西LIST_HPP.
最后,我们来看看你的Empty定义:
typedef <typename ListType>
bool <ListType>Empty()
{
return !_size; //returns true if size = 0
}
Run Code Online (Sandbox Code Playgroud)
首先,这缺少方法名称中的类名.其次,我不喜欢从数字到数字的转换bool.为什么不使用明确的比较?这也消除了评论,这本身没有用,因为它只是解释了代码.
这让我们:
template <typename ListType>
bool List<ListType>::Empty()
{
return _size != 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6361 次 |
| 最近记录: |