通用集类 - 复制构造函数

时间:2011-03-13 19:39:51

标签: c++

下午,伙计们和男孩们。

所以我现在正在研究一个通用集,试图让我的拷贝构造函数起作用。我有一个节点类完成。我现在对我来说似乎有些意义,但它仍然没有用......

当然,我仍然在链接列表方面遇到问题。

template<class T>
set<T>::set(const set<T> & other) {
    if(other.head == NULL) { head = NULL; }
    else {
        node <T> * s_ptr;
        node <T> * d_ptr;
        head = new node;
        head -> get_data() = other.head -> get_data();
        s_ptr = other.head -> set_link();
        d_ptr = head;

        while (s_ptr != NULL) {
            d_ptr -> set_link() = new node;
            d_ptr = d_ptr -> set_link();
            d_ptr -> data = s_ptr -> get_data();
            s_ptr = s_ptr -> link();
        } //end while

        d_ptr -> set_link() = NULL;     
    } //end else 
}

提前感谢您的帮助。你们真棒。

编辑: 这是设置链接的代码: void set_link(node * n){link = n;}

这是获取数据的代码: T get_data(){return data;}

编辑2: 它不是为我编译的。在声明new node的行上我收到错误: expected type specifier before node expected ';' before node

我在某个地方错过<T>吗?

4 个答案:

答案 0 :(得分:1)

d_ptr->link()看起来很有趣。应该是d_ptr->link。对于link

的一些其他用途也是如此

编辑:如果link是会员功能,您如何使用例如d_ptr -> link = new node;

我认为我们需要查看节点类 - 或者您需要粘贴正确的代码。

EDIT2:响应编译器错误:

new node;应为new node<T>;

答案 1 :(得分:0)

行是什么

d_ptr = d_ptr -> link();
应该怎么做?此时d_ptr是新构造的,可能是它的链接为NULL。其余部分对我来说看起来不错(除了Erik指出的链接vs link())。

答案 2 :(得分:0)

如果你把它称为函数,我唯一能想到的就是链接问题。 如果链接真的是一个函数并且它有一个像node* link()这样的原型那么就会出现问题但是你的代码没有问题; 这样的代码也应该起作用

template <class T> class node
{



  node*& link()
  {
    return *this;
  }
}

答案 3 :(得分:0)

head=new node<T>;
if(rhs.head!=NULL)
{
   node<T> *temp =new node<T>;
   node<T> *temp2=new node<T>;

   head->set_data(rhs.head->get_data());

   temp2=rhs.head->get_link();
   temp=head;

   while(temp2!=NULL)
   {
      temp->set_link(new node<T>);
      temp=temp->get_link();
      temp->set_data(temp2->get_data());
      temp2=temp2->get_link();
   }
}
else
{
  head==NULL;
}

您不能将函数用作变量。