C++ c++;使用具有结构成员的泛型类时出现编译器错误
我正在构建一个包含结构TreeNode的通用二叉树。我实现了一个函数rootPtr(),它返回指向树根的指针。binarytree.h简单如下:C++ c++;使用具有结构成员的泛型类时出现编译器错误,c++,class,generics,struct,tree,C++,Class,Generics,Struct,Tree,我正在构建一个包含结构TreeNode的通用二叉树。我实现了一个函数rootPtr(),它返回指向树根的指针。binarytree.h简单如下: template <class T> class BinaryTree { public: typedef struct TreeNode { T item; TreeNode *leftChildPtr; // pointer to left child TreeNode *rightChildPtr; pub
template <class T>
class BinaryTree {
public:
typedef struct TreeNode {
T item;
TreeNode *leftChildPtr; // pointer to left child
TreeNode *rightChildPtr;
public:
TreeNode(const T& nodeItem,
TreeNode *left,
TreeNode * right)
: item(nodeItem), leftChildPtr(left), rightChildPtr(right) {
}
TreeNode(const T & nodeItem)
: item(nodeItem) {
leftChildPtr = NULL;
rightChildPtr = NULL;
}
} TN; //end treenode
//Function prototype
TN* rootPtr() const;
private:
TN *root;
} //end binarytree
模板
类二叉树{
公众:
类型定义结构树节点{
T项;
TreeNode*leftChildPtr;//指向左子级的指针
TreeNode*rightChildPtr;
公众:
TreeNode(const T&nodeItem,
TreeNode*左,
树节点(右)
:项(nodeItem)、leftChildPtr(左)、righchildptr(右){
}
TreeNode(const T&nodeItem)
:项目(nodeItem){
leftChildPtr=NULL;
rightChildPtr=NULL;
}
}TN;//末端树节点
//功能原型
TN*rootPtr()常量;
私人:
总氮*根;
}//结束二进制树
这是binarytree.cpp中导致错误的代码段
template <class T>
BinaryTree<T>::TN* BinaryTree<T>::rootPtr() {
return root;
}
模板
BinaryTree::TN*BinaryTree::rootPtr(){
返回根;
}
编译器抱怨错误:在“*”标记之前需要构造函数、析构函数或类型转换
我以前见过这个错误,并使用类似于
BinaryTree::
的方法处理它,但这次由于它是泛型的,我不知道该怎么办。任何帮助都将不胜感激。简化的经验法则:当类在单独的cpp文件中有模板时,您不能定义成员函数。尝试将其与类定义放在一起,放在标题上;) 简化的经验法则:当类在单独的cpp文件中有模板时,不能定义成员函数。尝试将其与类定义放在一起,放在标题上;) 尝试在函数定义中的返回类型之前添加typename
,因为TN
是从属类的成员。尝试在函数定义中的返回类型之前添加typename
,因为TN
是一个依赖类的成员。添加typename
会产生另一个错误:在“TN”之前需要嵌套名称说明符ISO C++禁止声明“tn”,没有类型,你<代码>包含源文件中的头文件,添加<代码>类型名< /C> >另一个错误:“TN”之前的预期嵌套名称说明符ISO C++禁止声明“TN”,没有字体,你的代码>包含了源文件中的头文件?我接受你的答案,但是你知道这是解决办法。我仍然想知道我怎样才能做到上面的格式。我接受你的答案,但你知道这是一个解决办法。我仍然想知道我怎样才能做到上面的格式。