1. ホーム
  2. c++

[解決済み] C++テンプレートエラー:'='トークンの前にテンプレート引数がない

2022-02-09 19:55:08

質問

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; :

error: '=' トークンの前にテンプレート引数がありません root = &new_node;

しかし new_node は、構造体 Node .

解決方法は?

root 変数テンプレート を使用する場合は、template 引数を指定する必要があります。

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


ところで。 new_node はローカルなオブジェクトで SetRoot . その後 root<K> がぶら下がる。