gpt4 book ai didi

c++ - 错误 : this declaration has no storage or type specifier

转载 作者:行者123 更新时间:2023-11-28 07:54:47 26 4
gpt4 key购买 nike

我收到此消息,其中包含所有具有 Node* 的内容(此声明没有存储或类型说明符)。有人可以帮忙,请给我正确的方向吗?

template <typename type>
Node* Stack<type>::pop() {
Node* retNode; // the node to be return
if(tos == NULL) {
cerr << "*** Stack empty ***";
exit(1);
}
else {
retNode = tos; // store the location of tos
tos = tos->getLink(); // move to new tos
retNode->setLink(); // unlink the popped node from the stack
size -= 1;
}
return retNode;
}

我确定它正在处理 Node* 但我就是想不通是什么。

下面是我在堆栈类中使用的节点类的声明。如果您还需要我对堆栈类的声明,请告诉我,因为我看不出问题所在。

template <typename type>
class Node<type>{

private:
type data;
Node *link;

public:
Node(type p_item, Node *p_link);
type getData() const;
Node* getLink() const;
void setData(type p_data);
void setLink(Node *node);
};

最佳答案

Node是一个类模板,所以你不能使用 NodeNode *作为数据类型。您必须在尖括号中添加模板参数,例如Node<int>Node<char> *等等

在您给出的具体示例中,以下内容似乎是合适的:

template <typename type>
Node<type>* Stack<type>::pop() {
Node<type>* retNode;
/* ... */
return retNode;
}

即用于 Stack 的相同类型参数应该(可能)用于 Node

另外两个注意事项:

  1. 这似乎很奇怪,而 Node模板似乎实现了堆栈的内部数据结构,Node<type> *指针由堆栈的 pop 函数返回。返回 type 似乎更自然(更好的封装,对堆栈的用户来说更直观)对象。

  2. pop 函数调用 exit 似乎也很奇怪(从而使整个过程停止)当堆栈为空时。也许返回 nullptr 、虚拟对象或抛出异常(或类似策略)会更合适。

关于c++ - 错误 : this declaration has no storage or type specifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12927089/

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