为什么不能将字符串文字传递给使用模板参数的函数?

时间:2014-12-19 09:59:20

标签: c++

#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
}

为什么你不能在括号内使用字符串文字?是否有任何简单的方法可以在不声明字符串然后创建节点的情况下完成相同的任务,或者这是唯一的方法吗?

2 个答案:

答案 0 :(得分:7)

T推断为const char*,因此会返回Node<const char*>*,但您无法将其分配给Node<string>*

您可以创建一个临时的:

new_node(std::string("hi"));

或者您可以使用明确的资格来致电new_node

new_node<std::string>("hi");

答案 1 :(得分:2)

  

为什么不能将字符串文字传递给使用模板参数的函数?

您可以,您没有正确阅读编译器错误消息。

编译好:

new_node("hi");

但这并不是:

Node<string>* root = new_node("hi"); //error!

所以问题显然不是将字符串文字传递给模板函数。