Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的哈希表+;通过自定义结构和链表类 我试图通过从.txt文件中读取字典来创建C++中的拼写检查程序。我的read-in函数工作得非常好,我遇到的问题是当我尝试导航并添加到我的链接列表时_C++_Linked List - Fatal编程技术网

C+中的哈希表+;通过自定义结构和链表类 我试图通过从.txt文件中读取字典来创建C++中的拼写检查程序。我的read-in函数工作得非常好,我遇到的问题是当我尝试导航并添加到我的链接列表时

C+中的哈希表+;通过自定义结构和链表类 我试图通过从.txt文件中读取字典来创建C++中的拼写检查程序。我的read-in函数工作得非常好,我遇到的问题是当我尝试导航并添加到我的链接列表时,c++,linked-list,C++,Linked List,当我试图将最新节点的指针添加到头指针的值时,我得到一个错误,指出从“node”到“node*”没有可行的转换 执行此转换的最佳方式是什么 我已经试过转动我的“节点头”在我的链表类中指向一个指针,但收到相同的错误 首先,我创建了节点结构(在头文件中声明) 后跟我的LinkedList类(也在头文件中声明) 这是我的职责 void LinkedList::addToHead(LinkedList &myList, Node &myNode) { myNode.setNode

当我试图将最新节点的指针添加到头指针的值时,我得到一个错误,指出从“node”到“node*”没有可行的转换

执行此转换的最佳方式是什么

我已经试过转动我的“节点头”在我的链表类中指向一个指针,但收到相同的错误

首先,我创建了节点结构(在头文件中声明)

后跟我的LinkedList类(也在头文件中声明)

这是我的职责

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);
};