【发布时间】:2014-01-16 15:10:36
【问题描述】:
我正在用 C++ 编写地图数据结构的通用代码。 它应该基于一个链表,所以实际上我喜欢把它想象成一个有 2 个条目而不是一个条目的链表。 所以首先,我有以下(模板)类: const_iterator, iterator, Map, Node.
与问题相关的类是地图(使用所有其余部分的主类)和 Node.js。他们是这样定义的:
template<class K, class T>
class Map {
class Node;
Node* head;
Node* first;
Node* firstDemoNode;
Node* lastDemoNode;
int sizeOfMap;
Node* searchAux(K& key);
当然,这些只是字段,我没有包含方法。 和 Node 类:
template<class K, class T>
class Map<K, T>::Node {
friend class Map<K, T> ;
T data;
K key;
Node* prev;
Node* next;
bool isDemo;
friend class const_iterator;
}
最后一个类,const_iterator:
class Map<K, T>::const_iterator {
friend class Map<K, T> ;
const Map<K, T>::Node* node;
const Map<K, T>* map;
这个问题很奇怪。 const_iterator 的一些使用 Node 类的方法,当我尝试使用它时无法识别节点类,即当我实现如下方法时:
const T& getData() {
return node->data;
}
编译器 (eclipse, g++) 告诉我“字段‘数据’无法重新保存 也一样:
const K& getKey() {
return node->key;
}
typename Map<K, T>::const_iterator& operator++() {
if (node != NULL) {
node = node->prev;
}
return *this;
}
typename Map<K, T>::const_iterator& operator--() {
if (node != NULL) {
node = node->next;
}
return *this;
}
如果无法解析的字段是节点之后的字段->
我会很感激任何帮助,很抱歉发了这么长的帖子。 提前感谢您的帮助!
【问题讨论】:
-
"the compiler (eclipse, g++)" 那里好像有点混乱,eclipse是ide,g++是编译器。谁告诉你的?在我看来,这是日食。你试过编译吗?
-
我认为有些
typename不见了。 -
无法复制:ideone.com/nJCw44。你能发布一个完整的例子,以及确切的错误信息吗?或者这只是 Eclipse 未能索引代码(就像它经常做的那样),而不是编译错误?
-
@Jarod42:这将需要使用依赖类型名称,但这些错误显然来自依赖数据成员名称,不需要任何限定。
-
@wannabeprogrammer: 少量重现错误的代码将是理想的。这是很多代码,并且不会重现它,即使我添加了
main()来实例化有问题的成员函数。同样,您确定这是一个真正的编译器错误,而不仅仅是 Eclipse 显示虚假错误?