#include<iostream>
#include<string>
using namespace std;
template<typename T>
struct Node{
T data;
Node* left;
Node* right;
Node(T x) : data(x), left(NULL), right(NULL){}
};
template<typename T>
Node<T>* new_node(T x)
{
Node<T>* return_node = new Node<T>(x);
return return_node;
}
int main()
{
Node<string>* root = new_node("hi"); //error!
string x = "hi";
Node<string>* root2 = new_node(x); //OK
}
Run Code Online (Sandbox Code Playgroud)
为什么不能在括号内使用字符串文字?有没有简单的方法来完成相同的任务而不声明字符串然后创建节点,或者这是唯一的方法吗?
T被推断const char*,因此将被退回Node<const char*>*,但你不能将其分配给Node<string>*
你可以创建一个临时的:
new_node(std::string("hi"));
Run Code Online (Sandbox Code Playgroud)
或者你可以new_node用明确的资格打电话:
new_node<std::string>("hi");
Run Code Online (Sandbox Code Playgroud)