2013-03-10 98 views
0

編譯器說預期的構造函數,析構函數或類型轉換之前,「*」標記

error: expected constructor, destructor, or type conversion before ‘*’ token" 

,並指向這一行的.cpp:

Node * Tree::buildTree(Node *myNode, int h) { 

我猜測它可能是一些有關typedef但不是很確定。問題是什麼?

.h文件中:

#ifndef TREE_H 
#define TREE_H 

class Tree { 
    public: 
    Tree(); 
    Tree(Tree const & other); 
    ~Tree(); 
    Tree const & operator=(Tree const & other); 

    private: 
    class Node { 
     public: 
     Node() { 
      data = 0; 
     }; 
     Node(Node const & other) { 
      _copy(other); 
     }; 
     ~Node() {}; 
     Node const & operator=(Node const & other) { 
      if (this != &other) 
       _copy(other); 
      return *this; 
     }; 

     Node *left; 
     Node *right; 
     int data; 

     private: 
     void _copy(Node const & other) { 
      data = other.data; 
      left = other.left; 
      right = other.right; 
     }; 
    }; 

    Node *root; 

    Node * buildTree(Node *myNode, int h); 
}; 

.cpp文件:

... 

Node * Tree::buildTree(Node *myNode, int h) { 
    if (h == 0) 
     return NULL; 
    myNode = new Node(); 
    myNode->left = buildTree(myNode->left, h - 1); 
    myNode->right = buildTree(myNode->right, h - 1); 
    return myNode; 
} 

... 

回答

4

Node聲明的Tree裏面,所以你需要

Tree::Node * Tree::buildTree(Node *myNode, int h) 
+0

我希望有人會引用標準至於爲什麼[只有返回'Node'類型需要合格](http://ideone.com/G28eZ7)... – Dukeling 2013-03-10 21:46:18

+0

@Dukeling它是在'Tree :: buildTree'處於'Tree ::'範圍之後的任何事情。感謝您指出它! – juanchopanza 2013-03-10 21:47:42

+2

請參見[basic.scope.class]/1「5)擴展到或超過類定義末尾的聲明的潛在範圍也將 擴展到由其成員定義定義的區域,即使成員是用詞法定義的(包括_declarator-id_之後的此類定義的聲明部分的任何部分,包括_parameter-declaration-clause_ [...])。「 'Tree :: buildTree'是declarator-id,所以在你之後你在類範圍內,並且類的成員在範圍內,所以可以通過非限定名稱查找找到。 – 2013-03-10 21:56:51

相關問題