2016-11-11 55 views
1

我在我的复制构造函数中有警告。我有一个未使用的变量警告错误

基本上我有一个错误的复制分配,我解决了它,但然后警告(这被视为一个错误)弹出在我的复制构造函数。

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; 
} 

我认为它的使用,因为我分配obj2的与OBJ1(但为什么它认为是未使用的???)

我试过,但还是得不到解决

IntList* obj1; 
IntList* obj2; 
obj2 = obj1; 
+4

它被分配*,但其值不被使用*之后,所以赋值是没有用处的。 –

+0

请包括实际的编译器警告,否则这个问题很可能会被关闭 – antlersoft

回答

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; 
} 
0

此时应更换含obj1obj2在赋值运算符的功能与return *this;两条线。复制构造函数中不需要包含obj1obj2的两行。

+0

我认为成员函数push_back的确有诀窍:) –

0

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

IntList* obj1; 
IntList* obj2 = obj1; 

而且,它看起来是,你复制列表中,但你没有真正分配头节点的一些指针。所以当功能结束时,你会丢失复制的列表。

+0

@Vivek函数push_back是做什么的?你觉得如何?:) –

+0

他没有显示它做什么。据我们所知,它所做的只是将数据值添加到节点的数据属性中。 –

+0

更正:节点i –

相关问题