编译报错:不能将参数 一 从“double”转换为“double &”

编译报错:不能将参数 1 从“double”转换为“double &”?编译报错error C2664: “ListT::add”: 不能将参数 1

编译报错:不能将参数 1 从“double”转换为“double &”?
编译报错error C2664: “List<T>::add”: 不能将参数 1 从“double”转换为“double &”,请问是什么意思?


#include<iostream>
using namespace std;
//-------------------
template<typename T>
struct Node
{
Node(T &d):c(d), next(0), pref(0) { }
T c;
Node *next, *pref;
};//------------------
template<typename T>
class List
{
Node<T> *first, *last;
public:
List();
void add(T &c);
~List();
};//--------------------
template<typename T>
List<T>::List():first(0), last(0) { }
//----------------------
template<typename T>
void List<T>::add(T &c)
{
Node<T> *p = new Node<T>(c);
p->next = first;
first = p;
(last ? p->next->pref : last) = p;
}//------------------------
template<typename T>
List<T>::~List()
{
for(Node<T> *p; p = first; delete p)
first = first->next;
}//------------------------
int main()
{
List<double> dList;
dList.add(3.6);
}//------------------------


[解决办法]
template<typename T>
void List<T>::add(T &c)


3.6 就是不能转为 double &  ,因为它不可修改。  你应该写成 double const &,或者干脆写成double


[解决办法]
问题在于
void add(T &c);
它要求一个T类型的引用 
而3.6并不是引用

你可以

List<double> dList;
double a = 3.6;
dList.add(a);