Ошибка шаблона C ++: отсутствуют аргументы шаблона перед токеном '=' - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь создать функцию, которая устанавливает узел root LinkedList. Однако, когда я запускаю следующий фрагмент кода:

#include <iostream>
using namespace std;

template <typename K>
struct Node {
  Node<K>* next;
  const K value;
};

template <typename K>
Node<K>* root = NULL;

template <typename K>
void SetRoot(const K &key) {
    Node<K> new_node = Node<K> {NULL, key};
    root = &new_node;
}

int main(int argc, char *argv[])
{
     Node<int> n1 = Node<int> {NULL, 48};
     SetRoot(n1);

    return 0;
}

, я получаю эту ошибку в строке root = &new_node;:

ошибка: отсутствуют аргументы шаблона перед токеном '=' root = & new_node;

Однако new_node имеет все ожидаемые аргументы для структуры Node.

1 Ответ

4 голосов
/ 06 мая 2020

root - это шаблон переменной , вам необходимо указать аргумент шаблона при его использовании. например,

root<K> = &new_node;
//  ^^^   specifying K which is the template parameter of SetRoot

BTW: new_node - это локальный объект, который будет уничтожен при выходе из SetRoot. После этого root<K> свисает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...