【问题标题】:How to push back onto a queue using nodes?如何使用节点推回队列?
【发布时间】:2018-11-12 17:16:09
【问题描述】:

我有以下节点

struct Node
{
  Node(int s, std::vector<uint8_t> d) : score(s), data(d){};
  int score;
  std::shared_ptr<Node> left = nullptr;
  std::shared_ptr<Node> right = nullptr;
  std::vector<uint8_t> data;
};

目前,我正在从文件中读取一堆字符串并将其推回到字符串向量中。然后我继续创建一个队列std::queue&lt;Node&gt; myQueue。然后,我使用 for each 循环和序列中的每个项目,我使用包含我需要它们转换为的值的枚举来转换它。然后我创建一个新的 shared_ptr,将其传递给 0 分并插入新转换的向量。但是,当我尝试编译它时,出现以下错误:

error: no matching function call to 'std::queue<Node>::push(std::shared_ptr<Node>&)'

我有点卡住了,因为我不确定为什么它不能编译,因为这看起来很简单。

enum class Items : uint8_t
{
  A = 0x00,
  T = 0x01
};

std::vector<uint8_t> convert(std::string &s)
{
  std::vector<uint8_t> temp;
  for (int i = 0; i < s.size(); ++i)
  {
    switch(s[i])
    {
      case 'A':
        temp.push_back(uint8t_t(Items::A));
        break;
      case 'T':
        temp.push_back(uint8t_t(Items::T));
        break;
    }
  }
  return temp;
}

int main()
{
    std::vector<std::string> sequences;

    std::ifstream file("strings.txt");
    std::string line;   
    while (std::getline(file,line))
    {
    sequences.push_back(line); 
    }

    std::queue<Node> myQueue;

    for(auto && e : sequences)
    {
        std::vector<uint8_t> strings = convert(e);
        auto makeNode = std::make_shared<Node>(0,strings);
        myQueue.push(makeNode);
    }

}

我不知道我做错了什么,我认为这是构造节点队列的正确方法。

【问题讨论】:

    标签: c++ debugging queue nodes


    【解决方案1】:

    您尝试将对象节点推送到对象节点的 std::shared_ptr 队列。指针不是对象。

    创建队列的正确方法是:

     std::queue<std::shared_ptr<Node>> myQueue;
    

    【讨论】:

    • 谢谢!我不敢相信我错过了。
    猜你喜欢
    • 2013-04-04
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多