簡體   English   中英

錯誤:此聲明沒有存儲或類型說明符

[英]Error: this declaration has no storage or type specifier

我收到包含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或虛擬對象,或者拋出異常(或類似策略)會更合適。

暫無
暫無

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

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