C+中的哈希表+;通过自定义结构和链表类 我试图通过从.txt文件中读取字典来创建C++中的拼写检查程序。我的read-in函数工作得非常好,我遇到的问题是当我尝试导航并添加到我的链接列表时
当我试图将最新节点的指针添加到头指针的值时,我得到一个错误,指出从“node”到“node*”没有可行的转换 执行此转换的最佳方式是什么 我已经试过转动我的“节点头”在我的链表类中指向一个指针,但收到相同的错误 首先,我创建了节点结构(在头文件中声明) 后跟我的LinkedList类(也在头文件中声明) 这是我的职责C+中的哈希表+;通过自定义结构和链表类 我试图通过从.txt文件中读取字典来创建C++中的拼写检查程序。我的read-in函数工作得非常好,我遇到的问题是当我尝试导航并添加到我的链接列表时,c++,linked-list,C++,Linked List,当我试图将最新节点的指针添加到头指针的值时,我得到一个错误,指出从“node”到“node*”没有可行的转换 执行此转换的最佳方式是什么 我已经试过转动我的“节点头”在我的链表类中指向一个指针,但收到相同的错误 首先,我创建了节点结构(在头文件中声明) 后跟我的LinkedList类(也在头文件中声明) 这是我的职责 void LinkedList::addToHead(LinkedList &myList, Node &myNode) { myNode.setNode
void LinkedList::addToHead(LinkedList &myList, Node &myNode)
{
myNode.setNode(myList.getHead().getNode());
//Here is where I'm getting my error
//"No viable conversion from 'Node' to 'Node *'
myList.setHead(myNode);
}
LinkedList
类不应拥有第一个节点
成员head
应该是节点*
宽度默认值nullptr
(列表为空)。
listSize
还应指定默认值
LinkedList() head(nullptr), listSize(0) {};
编辑
就个人而言,我会避免强制外部代码来管理单个节点。
保持独立于实现的接口
class LinkedList
{
private:
Node *head_;
int size_;
public:
LinkedList();
~LinkedList();
int size() const { return listSize; }
// insert after the i-th element
void insert(std::size index, std::string const& word);
// return the i-th element
std::string &at(std::size index);
std::string const &at(std::size index) const;
// removes the i-th element
void remove(size::size index);
};
通过这种方式,您可以将所有列表操作代码集中到LinkedList
类中
您还应该考虑与复制<代码>链接目录> /代码>对象有关的问题。< /P>是分配您自己的列表和哈希表的任务吗?否则,C++标准指定,包括.YUP,它是一个数据结构类,我们假设为这个任务创建我们自己的链表。在完成这项任务后,我被允许使用标准库。这样会更方便……
listSize
应该是链接列表中链接数量的反映。授予用户使用setListSize
方法更改此设置的能力只会导致灾难。这就引出了关于getter和setter的注释。使成员私有化的目的是限制访问。如果您有public
访问器函数,这些函数不限制访问,那么您的成员也可能是public
。默认情况下,不要添加访问器,仅根据需要添加它们,并添加测试以确保用户没有试图滥用访问器。例如,如果除数
为零,则设置除数
应确保用户无法将除数
设置为零。如果它没有进行此检查,它唯一的用途就是有一个地方挂起一个调试器断点,以找出谁正在将除数设置为零。我尝试过这个,问题是它使我在函数中执行的两个交换在从节点到*节点的转换中都有相同的问题。我将以这种方式再次使用它,但最初它没有编译。我添加了一些建议。尤其要避免将节点类暴露给外部代码。这只是一个实现detail@bordia不管你喜欢与否,节点头代码>绝对是错误的。无论您的实现中有什么其他bug,都需要修复。Node::getNode()应该返回一个节点*而不是该节点的副本,然后setNode()将编译。
LinkedList() head(nullptr), listSize(0) {};
class LinkedList
{
private:
Node *head_;
int size_;
public:
LinkedList();
~LinkedList();
int size() const { return listSize; }
// insert after the i-th element
void insert(std::size index, std::string const& word);
// return the i-th element
std::string &at(std::size index);
std::string const &at(std::size index) const;
// removes the i-th element
void remove(size::size index);
};