列表列表,赋值运算符失败

时间:2012-02-13 02:30:52

标签: c++ templates

代码太长了,所以我加入了pastebin,我在这里只提出了最有意义的部分。 (here is the entire code)
我已经创建了一个类List,只要我不尝试创建列表列表就可以正常工作,我举个例子:

List<List<string> > l;
l.push_back(List<string>());
l[0].push_back(string("ciao"));

没有语法错误,但有一个例外,我知道原因,问题是构造函数,它调用赋值运算符:

template <class T>
List<T>::List(const T& info)
{
    end=false;
    next=prev=this;
    this->info=info;  // ++++++++++++++
}

问题出现在我使用'+'签名的行中。赋值运算符仅在我将列表分配给列表时才起作用(这意味着它们都必须是哨兵,或者两者都不是哨兵)。所以是分配运算符重载:

template<class T>
List<T>& List<T>::operator= (const List<T>& l) throw()
{
    List<T>* ptr=l.next;
    try
    {
        if( (end)^(l.end) )
            throw excp1();
    }
    catch(excp1& e)
    {
        std::cerr <<"Exception: "<< e.what() <<std::endl;
        exit(EXIT);
    }
    if(this!=&l)
    {
        if(end)
        {
            resize(0);
            while(!ptr->end)
            {
                push_back(ptr->info);
                ptr=ptr->next;
            }
        }
        else
        {
            info=l.info;
        }
    }
    return *this;
}
当我尝试将列表节点分配给哨兵或反之时,会发生

excp1。他们必须是两个哨兵或两个节点。但我不知道如何避免这种异常,我是否必须编写另一个版本的构造函数?如果有,怎么样?的思想,提出?

0 个答案:

没有答案