标题:诚求教模板问题~~拜托了
只看楼主
韩雨航
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2012-1-12
结帖率:57.14%
已结贴  问题点数:3 回复次数:1 
诚求教模板问题~~拜托了
//===========
//f1406.cpp
//使用类模板
//===============
#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);
    void remove(T& c);
    Node<T>* find(T& c);
    void print();
    ~List();
};//----------------------------
template<typename T>
List<T>::List():first(0),last(0){}
//--------------------------------
template<typename T>
void List<T>::add(T& n)
{
    Node<T>* p=new Node<T>(n);
    p->next=first;
    first=p;
    (last?p->next->prev:last)=p;
}//-----------------------------------
template<typename T>
void List<T>::remove(T& n)
{
    if(!(Node<T>* p=find(n)))    return;                    //=????
    (p->next?p->next->prev:last)=p->prev;
    (p->prev?p->prev->next:first)=p->next;
    delete p;
}//-------------------------------------
template<typename T>
Node<T>* List<T>::find(T& n)
{
    for(Node<T>* p=first;p;p=p->next)
        if(p->c==n)    return p;
        return 0;
}//--------------------------------------
template<typename T>
List<T>::~List()
{
    for(Node<T>* p=first;p;delete p)
        first=first->next;
}//--------------------------------------
template<typename T>
void List<T>::print()
{
    for(Node<T>* p=first;p;p=p->next)
        cout<<p->c<<" ";
        cout<<endl;
}//--------------------------------------
int main()
{
    List<double> dList;
    dList.add(3.6);
    dList.add(5.8);
    dList.print();
    List<int> iList;
    iList.add(5);
    iList.add(8);
    iList.print();
}
'add' : cannot convert parameter 1 from 'const double' to 'double &'???
搜索更多相关主题的帖子: include next void public 
2012-05-09 15:30
双刃
Rank: 2
等 级:论坛游民
帖 子:7
专家分:28
注 册:2012-5-9
得分:3 
试试把void add(T& c);

改为void add(const T& c);

你主程序调用add(5),5是常数,要引用必须指明是常量指针,即所谓的const T &,这样要求可以防止引用指针修改常量。。。

简单的例子:
void add (int & c)
{
    c = 8;        //假如有一个模板实例化为这个函数,我们发现,调用add(5);时,你的引用指针是在修改常量的,所以通不过。。。
}
2012-05-10 00:47



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-367243-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.142851 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved