我对未使用的变量警告有错误

时间:2016-11-11 23:53:59

标签: c++

我的复制构造函数中有一个警告。

基本上我在复制分配中遇到错误并且我解决了它,但随后在我的复制构造函数中弹出警告(被视为错误)。

IntList::IntList(const IntList& cpy){
  head = 0; 
  tail = 0;
  for(IntNode* i = cpy.head; i != 0; i = i->next){
    push_back(i->data);
  }
  IntList* obj1;
  IntList* obj2 = obj1;
}

IntList& IntList::operator=(const IntList& rhs){
  head = 0;
  tail = 0;
  for(IntNode* i = rhs.head; i != 0; i = i -> next){
    push_back(i->data);
  }
  IntList* obj1;
  IntList* obj2 = obj1;
  return *obj2;
}

我认为它被使用了,因为我用obj1指定了obj2(但为什么它被认为是未使用的?)

我尝试了这个但仍未解决

IntList* obj1;
IntList* obj2;
obj2 = obj1;

3 个答案:

答案 0 :(得分:1)

这些陈述

IntList* obj1;
IntList* obj2 = obj1;

没有任何意义。删除它们。

考虑到复制赋值运算符

IntList& IntList::operator=(const IntList& rhs){
  head = 0;
  tail = 0;
  for(IntNode* i = rhs.head; i != 0; i = i -> next){
    push_back(i->data);
  }
  IntList* obj1;
  IntList* obj2 = obj1;
  return *obj2;
}

无效。它不会释放列表中所有先前分配的内存。它应该返回自己的参考。所以最后的陈述应该是

return *this;

操作员可以按以下方式查看

IntList & IntList::operator =( const IntList &rhs )
{
    while ( head )
    {
        IntNode *tmp = head;
        head = head->next;
        delete tmp;
    }

    tail = head;

    for ( IntNode* i = rhs.head; i != 0; i = i -> next )
    {
        push_back( i->data );
    }

    return *this;
}

答案 1 :(得分:0)

您应该使用obj1替换赋值运算符函数中包含obj2return *this;的两行。复制构造函数中不需要包含obj1obj2的两行。

答案 2 :(得分:0)

以下代码中没有用处。这毫无意义。

IntList* obj1; 
IntList* obj2 = obj1;

此外,它看起来是您正在复制列表,但实际上并没有将头节点分配给某个指针。因此,当函数结束时,您将丢失复制的列表。