簡體   English   中英

c ++ - 在取消引用的對象指針上調用成員函數

[英]c++ - call member function on dereferenced object pointer

template <typename T>
class Node {
    private:
    T data;
    Node<T> * next;
    public:

    Node(T _data, Node<T> * _next): data(_data), next(_next){}

    T get_data() const {
        return this->data;
    }

    Node<T> * get_next() const {
        return this->next;
    }

    void set_data(T data) {
        this->data = data;
    }

    void set_next(Node<T> * next) {
        this->next = next;
    }   
};

現在我嘗試在取消引用的對象指針上調用“set_next()”函數:

Node<T> new_element(element, NULL);
Node<T> * tmp = this->get_last(); // returns a pointer to the last element
*tmp.set_next(&new_element);

當我嘗試編譯控制台時會打印此錯誤消息:

error: request for member ‘set_next’ in ‘tmp’, which is of pointer 
type ‘Node<int>*’ (maybe you meant to use ‘->’ ?)
*tmp.set_next(&new_element);

我不明白為什么編譯器要我使用 '->' 因為 '.' 是調用公共成員函數的完美方法,對嗎?

然而,當我把:

Node<T> new_element(element, NULL);
Node<T> * tmp = this->get_last();
*tmp->set_next(&new_element);

我明白了:

error: void value not ignored as it ought to be
*tmp->set_next(&new_element);

我不明白這是什么意思,有人可以幫助我嗎?

由於運算符優先,

*tmp.set_next(&new_element);

是相同的

*(tmp.set_next(&new_element));

這顯然不是你想要的。

您可以使用

(*tmp).set_next(&new_element);

或者

tmp->set_next(&new_element);
tmp->set_next(&new_element);

是正確的用法。

出現錯誤消息是因為*嘗試取消引用返回值,即void

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM