gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:27:17 24 4
gpt4 key购买 nike

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

我不明白为什么编译器要我使用“->”,因为“.”是调用公共(public)成员函数的完美方式,对吧?

但是当我把:

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

关于c++ - 在取消引用的对象指针上调用成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41878602/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com