超级基本声明新模板类对象的问题

时间:2009-11-28 00:29:21

标签: c++ templates

我知道这可能是第一年的问题,但是我遇到了一些模板问题,但我还没有找到合适的答案。我正试图像这样实例化一个新的模板化的类:

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

这是指一个看似如下的构造函数:

template <class T>
//paramerter receving constructor
TreeNode<T>::TreeNode(T item){
  data[0] = item;
  nodeType = 2;
}//end 

我收到以下错误:
错误:'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;

}

每次尝试在函数

中创建新对象时,我都会遇到相同的两个错误

1 个答案:

答案 0 :(得分:4)

您忘记了T中的new和指针:

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

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