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;
}
...
我希望有人會引用標準至於爲什麼[只有返回'Node'類型需要合格](http://ideone.com/G28eZ7)... – Dukeling 2013-03-10 21:46:18
@Dukeling它是在'Tree :: buildTree'處於'Tree ::'範圍之後的任何事情。感謝您指出它! – juanchopanza 2013-03-10 21:47:42
請參見[basic.scope.class]/1「5)擴展到或超過類定義末尾的聲明的潛在範圍也將 擴展到由其成員定義定義的區域,即使成員是用詞法定義的(包括_declarator-id_之後的此類定義的聲明部分的任何部分,包括_parameter-declaration-clause_ [...])。「 'Tree :: buildTree'是declarator-id,所以在你之後你在類範圍內,並且類的成員在範圍內,所以可以通過非限定名稱查找找到。 – 2013-03-10 21:56:51