|
10鱼币
本帖最后由 灬愤怒DE尐鸟灬 于 2013-2-19 16:54 编辑
template<typename T>
class BSTree{
public:
BSTree():root(NULL){};
BSTree &operator=(const BSTree &);
~BSTree();
。。。
private:
struct Node{ //内嵌类
T data;
Node *lchild;
Node *rchild;
};
Node *root;
//Node *作为返回值时成员函数在类外定义出错,直接在类内定义则没问题
Node *max(Node *tree) const;
Node *min(Node *tree) const;
Node *clone(Node *tree) const;
};
//类外定义提示: 错误:expected constructor, destructor, or type conversion before ‘*’ token
template<typename T>
Node *BSTree<T>::max(Node *tree) const{
if(NULL == tree)
return NULL;
if(NULL == tree->lchild)
return tree;
return max(tree->lchild);
}
定义如上所示的外部类和内嵌类,然后以Node *在类外定义max、min、clone方法时提示下面的错误:
错误:expected constructor, destructor, or type conversion before ‘*’ token
如果在类内直接定义这三个方法则无错误,请问此处以Node *作为返回值在外部定义成员函数
为什么会出错,改成BSTree<T>::Node *也是错的。而在类内则没有问题。
|
最佳答案
查看完整内容
修改后代码: (vs2010上编译通过)
关键点在于 typename BSTree::Node* BSTree::max(Node *tree) const{ 这一句,函数的返回值是你的类成员,你却没有指明作用域,所以编译器就没有办法找到。关于前面的typename,是指明这个是个类型。
参考资料:
http://hi.baidu.com/thenow/item/0a3aa3ac72a05ff714329b15
|