c ++ - 在解除引用的对象指针上调用成员函数

时间:2017-01-26 16:44:50

标签: c++ pointers object

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

我不明白为什么编译器要我使用' - &gt;'因为'。'是一个调用公共成员函数的完美方式,对吗?

然而,当我把:

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

我不明白这意味着什么,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

由于运营商优先权,

*tmp.set_next(&new_element);

相同
*(tmp.set_next(&new_element));

这显然不是你想要的。

您可以使用

(*tmp).set_next(&new_element);

tmp->set_next(&new_element);

答案 1 :(得分:0)

tmp->set_next(&new_element);

是正确的用法。

出现错误消息是因为*尝试取消引用返回值,即void