2017-04-21 118 views
0

我刚刚开始使用C++。我试图用C++编写一个简单的LinkedList。 但是我收到以下错误,因为我无法弄清楚为什么我无法使用链接对象*newLinkThree调用成员函数printAllLinkedList实现C++错误指针间接寻址

main.cpp:40:16: error: member reference type 'Link *' is a pointer; maybe you 
     meant to use '->'? 
    *newLinkThree.printAll(newLinkThree); 
    ~~~~~~~~~~~~^ 
       -> 
main.cpp:40:3: error: indirection requires pointer operand ('void' invalid) 
    *newLinkThree.printAll(newLinkThree); 

这是我的代码 -

#include <iostream> 

using namespace std; 

class Link { 
    char* value; 
    Link* next; 
public: 

    Link(char* val, Link* nextLink) { 
    value = val; 
    nextLink = next; 
    } 

    ~Link() { 
    value = NULL; 
    delete[] next; 
    } 

    void printAll(Link* top) { 
    if(top->next == NULL) { 
     cout<<top->value<<endl; 
     return; 
    } 

    cout<<top->value<<endl; 
    printAll(top->next); 
    } 
}; 

int main() { 

    char* first = "First"; 
    char* second = "Second"; 
    char* third = "Third"; 

    Link* newLink = new Link(first, NULL); 
    Link* newLinkTwo = new Link(second, newLink); 
    Link* newLinkThree = new Link(third, newLinkTwo); 
    *newLinkThree.printAll(newLinkThree); 
    return 0; 

} 

回答

1

注意operator.具有较高precedenceoperator*。所以

*newLinkThree.printAll(newLinkThree); 

相当于

*(newLinkThree.printAll(newLinkThree)); 

但你不能在一个指针调用operator.

您可以添加括号指定优先级:

(*newLinkThree).printAll(newLinkThree); 

或只是作为错误信息提示,

newLinkThree->printAll(newLinkThree); 
+0

谢谢!我的printAll不是打印所有的三个值。由于某种原因,它仅印刷第三张。你能帮我解决吗? – Kek

+1

@Kek呃,那是另一个问题。但在提出新问题之前,我建议您尝试调试并找出具体问题。如果仍然无法解决问题,请再次提出一个新问题。 – songyuanyao

+1

@Kek一些问题:'nextLink = next;'应该是'next = nextLink;',在构造函数中。 delete []'应该是析构函数中的'delete'。 – songyuanyao