C++ Super basic声明新模板化类对象问题

C++ Super basic声明新模板化类对象问题,c++,templates,C++,Templates,我知道这可能是第一年的问题,但我在模板方面遇到了一些问题,我还没有找到合适的答案。我尝试实例化一个新的模板类,如下所示: TreeNode <T>newLeft = new TreeNode(root->data[0]); TreeNode newLeft=newtreenode(根->数据[0]); 这是指一个构造函数,它看起来像: template <class T> //paramerter receving constructor TreeNode<

我知道这可能是第一年的问题,但我在模板方面遇到了一些问题,我还没有找到合适的答案。我尝试实例化一个新的模板类,如下所示:

TreeNode <T>newLeft = new TreeNode(root->data[0]);
TreeNode newLeft=newtreenode(根->数据[0]);
这是指一个构造函数,它看起来像:

template <class T>
//paramerter receving constructor
TreeNode<T>::TreeNode(T item){
  data[0] = item;
  nodeType = 2;
}//end 
模板
//参数接收构造函数
树节点::树节点(T项){
数据[0]=项目;
节点类型=2;
}//结束
我得到以下错误:
错误:“TreeNode”之前需要类型说明符
错误:应为“;”在“TreeNode”之前

什么是类型说明符?如果需要的话,我可以提供更多的代码,我知道我之前问过一个关于这段代码的问题,我确信我会为此而大发雷霆;但我还有问题

编辑: 下面是它所使用的函数:

template <class T>
void TwoThreeFourTree<T>::splitRoot(){
  TreeNode <T> newRoot;
  newRoot = new TreeNode(root->data[1]);

  TreeNode <T>newLeft = new TreeNode(root->data[0]);

  TreeNode <T>newRight = new TreeNode(root->data[2]);

  newRoot.child[0] = newLeft;
  newRoot.child[1] = newRight;

  newLeft.child[0] = root.child[0];
  newLeft.child[1] = root.child[1];

  newRight.child[0] = root.child[2];
  newRight.child[1] = root.child[3];

  root = newRoot;
模板
void TwoThreeFourTree::splitRoot(){
新根三叶草;
newRoot=newtreenode(root->data[1]);
TreeNode newLeft=新的TreeNode(根->数据[0]);
TreeNode newRight=新的TreeNode(根->数据[2]);
newRoot.child[0]=newLeft;
newRoot.child[1]=newRight;
newLeft.child[0]=根.child[0];
newLeft.child[1]=根.child[1];
newRight.child[0]=根.child[2];
newRight.child[1]=根.child[3];
根=新根;
}


每次尝试在函数中创建新对象时,我都会遇到相同的两个错误

您在
new
中忘记了
T
,以及指针:

TreeNode<T>* newRoot;
newRoot = new TreeNode<T>(root->data[1]);
TreeNode*newRoot;
newRoot=newtreenode(root->data[1]);

注意,您需要在任何地方修复指针的使用,而不仅仅是在这里。请记住,这不是Java或C#,类型为
TreeNode
的变量不是对
t
的引用-它是一个t。要构建树,需要引用-即指针。虽然您可能还想考虑使用<代码> STD:AutoMyPTR <代码>来保证清理。

您忘记了<代码> T <代码> > < <代码> >和指针:

TreeNode<T>* newRoot;
newRoot = new TreeNode<T>(root->data[1]);
TreeNode*newRoot;
newRoot=newtreenode(root->data[1]);
注意,您需要在任何地方修复指针的使用,而不仅仅是在这里。请记住,这不是Java或C#,类型为
TreeNode
的变量不是对
t
的引用-它是一个t。要构建树,需要引用-即指针。尽管您可能还想考虑使用<代码> STD::AutoMyPTR <代码>来保证清理。

第一个声明(“NeXLead”)是否出现在一些模板函数或模板类中?在“newLeft”的类型上使用类型参数“T”不能出现在非模板定义中。第一个声明(“newLeft”)是否出现在某个模板函数或模板类中?在“newLeft”的类型上使用类型参数“T”不能出现在非模板定义中。