2014-09-25 106 views
-1

我正在使用C++实现链表。我在LinkedList.h中创建了一个struct Node,并尝试在节点中重载运算符。但是,当我编译,我得到这个错误 代码:为链表创建节点C++

#ifndef LINKEDLIST_H 
#define LINKEDLIST_H 

class LinkedList{ 
typedef struct Node{ 
    int data; 
    Node* next; 
} * nodePtr; 

//Returns true if the current Node object value is 
//less than the parameter Node object value 
bool operator < (const Node& node) const { 
    return this->data < node->data;   <--- Unable to resolve identifier data. 
}; 
#endif /* LINKEDLIST_H */ 

我不知道我做错了什么。有人能告诉我吗?! 谢谢!

回答

0

您传递节点作为参考,所以你应该使用node.data

删除也关键字typedef,因为它使你只定义类型和你的清单明确需要一个指向第一个节点!

然后,你必须更新你的回报:

return this->nodePtr->data < node.data; 
+0

我改变它为node.data,但直到有同样的问题。我想将此节点的数据与传入的节点的数据节点进行比较。 – Jnk 2014-09-25 22:17:47

0

它看起来像你想访问的东西不存在。您的LinkedList实现没有名为data的变量。

最简单的解决方法是改变你的身体operator

return this->nodePtr->data < node->data; 

不过,我建议重构有一个完整的独立的类Node;你可以把操作符重载放在那个类中。

+0

return this-> nodePtr-> data < node-> data;我试过这个,但仍然有同样的问题 – Jnk 2014-09-25 22:18:12

1

尽管我会这样做,但问题在于,您没有在类中定义任何位置来容纳节点结构。我不知道你是否试图这样做:

class LinkedList{ 
    typedef struct Node{ 
     int data; 
     Node* next; 
    } * nodePtr; 

    Node node; // Added this 

    //Returns true if the current Node object value is 
    //less than the parameter Node object value 
    bool operator < (const Node& node) const { 
     return this->node.data < node.data; 
    } 
};