2016-09-29 21 views
5

Tôi đang cố triển khai Đặt dựa trên số Tìm kiếm cây nhị phân. Vì vậy, tôi đang xây dựng bộ này bắt đầu từ một số gốc (con trỏ tới Nút), trong đó Nút có giá trị, con phải và trái (cả hai con trỏ tới Node cũng). Vì vậy, theo cách này tôi có thể thiết lập một nút mới ở bên phải của nút gốc bằng cách trỏ root-> sang phải nút đã tạo và cứ thế. Hãy nhìn vào các định nghĩa:Đối tượng không đặt tên loại - C++

template <class T> 
class Set 
{ 
    public: 
     Set(); 
     ~Set(); 
     void push(const T&); 
     bool belongs(const T&) const; 
     void remove(const T&); 
     const T& min() const; 
     const T& max() const; 
     unsigned int cardinal() const; 
     void show(std::ostream&) const; 

     friend ostream& operator<<(ostream& os, const Set<T> &c) { 
      c.show(os); 
      return os; 
     } 

    private: 

     struct Node 
     { 
      Node(const T& v); 
      T value; 
      Node* left; 
      Node* right; 
     }; 

     Node* root_; 
     int cardinal_; 

    Node & fatherOfNode(const Node & root, const T & key, const bool hook) const; 

}; 

... 

// This function is the one with errors. 
template <class T> 
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const { 
    // Some code 
} 

Vì vậy, tôi đang gặp lỗi này:

/home/jscherman/ClionProjects/algo2-t3-bts/set.hpp:247:1: error: ‘Node’ does not name a type 
Node & Set<T>::fatherOfNode(const Node & root, const T & key, const bool hook) const { 
^ 

Tôi đã nhìn thấy rất nhiều bài viết liên quan đến lỗi này, nhưng hầu hết trong số họ đã gây ra bằng cách viết triển khai chức năng trước các định nghĩa của nó. Như bạn có thể thấy, việc triển khai chaOfNode nằm dưới định nghĩa của nó, vì vậy dường như không phải là trường hợp của tôi.

Bất kỳ ý tưởng nào về những gì đang diễn ra?

+2

Phải là 'Đặt :: Nút'. –

+0

Điều gì sai với câu hỏi? Tôi nghĩ rằng tôi đã được cụ thể và rõ ràng đủ. Bạn có thể cho tôi biết tôi đã làm gì sai vì vậy tôi sẽ không lặp lại nó trong tương lai? – jscherman

Trả lời

4

Node là một lớp học nội trong Set, vì vậy bên ngoài của lớp này, bạn cần phải giải quyết này với:

Set<T>::Node 

Vì vậy, định nghĩa chức năng của bạn sẽ cần phải:

template <class T> 
typename Set<T>::Node & Set<T>::fatherOfNode(const Set<T>::Node & root, const T & key, const bool hook) const { 

Here it is, working.

+0

Ohhhh tôi đã thử điều này mà không có 'typename'. Cảm ơn! – jscherman

Các vấn đề liên quan