错误:"<"令牌之前的预期非限定 ID(模板编译问题)
error: expected unqualified-id before '<' token (Template compilation issue)
我正在尝试创建自己的模板化List类作为练习。我本应该从小开始的,但你来了。。我在每一行都得到错误"在'<'标记之前预期的不合格id",该行显示:
typedef <typename ListType>
我是一名学生,我已经阅读了几个小时的模板,但仍然无法理解这一点,任何帮助都将不胜感激!
我的列表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
我还将包括模板化的节点类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
它是template
,而不是typedef
。
当我们处理它时,预处理器令牌是无效的标识符,因为它们以下划线开头,这在这里是不允许的。请使用类似LIST_HPP
的内容。
最后,让我们看看您的Empty
定义:
typedef <typename ListType>
bool <ListType>Empty()
{
return !_size; //returns true if size = 0
}
首先,方法名中缺少类名。其次,我不喜欢从数字到bool
的转换。为什么不使用明确的比较呢?这也排除了注释,注释本身是无用的,因为它只是对代码的转述。
这给我们留下了:
template <typename ListType>
bool List<ListType>::Empty()
{
return _size != 0;
}
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 解析问题 - 预期的非限定 ID - #include <array> 编译错误
- "Extern"对象问题:错误:Id 返回 1 个退出状态
- 解析问题:预期的不合格的ID和语义问题:C 需要所有声明的类型说明符
- 简单c++程序Id的问题返回1退出状态
- 错误:"<"令牌之前的预期非限定 ID(模板编译问题)
- 我给北大法官ID 1003的这个解决方案有什么问题
- 遇到错误问题:在'{'之前,预期的非限定 id 只是一个我需要的类的标头,只是不确定导致错误的原因
- 返回模板类的模板函数 - GCC 编译问题 - 错误:令牌之前'<'预期非限定 ID
- 解析问题-预期的非限定id
- 如何解决 Cppcheck 中的问题 ID "toomanyconfigs"和"missingInclude:"
- 嵌套类的问题。 "error: expected unqualified-id before '{' token"
- MFC中的ID模式问题