Как вернуться в очередь, используя узлы? - PullRequest
0 голосов
/ 03 июня 2018

У меня есть следующий узел

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<Node> myQueue.Затем я использую для каждого цикла и для каждого элемента в моих последовательностях, я конвертирую его, используя перечисление, которое содержит значения, в которые они мне нужны для преобразования.Затем я создаю новый 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);
    }

}

Я не знаю, что я делаю неправильно, я думаю, что это правильный способ построения очереди узлов.

1 Ответ

0 голосов
/ 03 июня 2018

Вы пытаетесь поместить объект Node в очередь std :: shared_ptr объекта Node.Указатель не является объектом.

Правильный способ создания очереди:

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