2012-06-03 46 views
0

我最近开始学习C++,并在理解模板机制时遇到问题。 该任务首先是构建用户定义的二叉树。我无法编译我的代码。使用代码错误的模板

#include <iostream> 
using namespace std; 
template <typename DataType> struct TreeNode 
{ 
    TreeNode(DataType val, TreeNode *leftPtr = null, TreeNode *rightPtr = null) 
    { 
     left = leftPtr; 
     right = rightPtr; 
     data = val; 
    } 
    TreeNode *left, *right; 
    DataType data; 
}; 
template <typename DataType> TreeNode *BuildTree() 
{ 
    TreeNode *root = new TreeNode(10, new TreeNode(20), new TreeNode(30)); 

    TreeNode *curRoot = root; 
    curRoot = curRoot->left; 
    curRoot->left = new TreeNode(40); 
    curRoot->left->left = new TreeNode(70); 
    curRoot->right = new TreeNode(50); 
    curRoot = curRoot->right; 
    curRoot->left = new TreeNode(80, new TreeNode(100), new TreeNode(110)); 
    curRoot = root->right; 
    curRoot->left = new TreeNode(60); 
    curRoot = curRoot->left; 
    curRoot->right = new TreeNode(90, new TreeNode(120), new TreeNode(130)); 

    return root; 
} 
int main() 
{ 
    TreeNode *treeRoot = BuildTree<int>(); 
    cin.get(); 
    return 0; 
} 

功能BuildTree建立树的具体实例,具体数据类型。请帮我理解我的错误。 请不要留意使用后我没有释放记忆的事实。这只是一个草稿。

+4

当问一个问题关于一个编译问题,你应该总是发布确切的错误信息。 –

回答

4

由于TreeNode是一个模板类,你有当您使用它来指定专业化:

template <typename DataType> TreeNode *BuildTree() 

应该

template <typename DataType> TreeNode<DataType> *BuildTree() 

TreeNode *root = new TreeNode(10, new TreeNode(20), new TreeNode(30)); 

应该

TreeNode<DataType> *root = new TreeNode(10, new TreeNode(20), new TreeNode(30)); 

等人的方法,再加上main:中

TreeNode<int> *treeRoot = BuildTree<int>(); 

代替

TreeNode *treeRoot = BuildTree<int>(); 
+0

不是这样的:'TreeNode * root = new TreeNode (10,new TreeNode (20),new TreeNode (30));'? – Ruben

+0

非常感谢,你帮了我很多! –

0

我觉得你的代码应该是这样的:

#include <iostream> 
using namespace std; 
template <typename DataType> struct TreeNode 
{ 
    TreeNode(DataType val, TreeNode<DataType> *leftPtr = null, TreeNode<DataType> *rightPtr = null) 
    { 
     left = leftPtr; 
     right = rightPtr; 
     data = val; 
    } 
    TreeNode<DataType> *left, *right; 
    DataType data; 
}; 
template <typename DataType> TreeNode<DataType> *BuildTree() 
{ 
    TreeNode<DataType> *root = new TreeNode(10, new TreeNode<DataType>(20), new TreeNode<DataType>(30)); 

    TreeNode<DataType> *curRoot = root; 
    curRoot = curRoot->left; 
    curRoot->left = new TreeNode<DataType>(40); 
    curRoot->left->left = new TreeNode<DataType>(70); 
    curRoot->right = new TreeNode<DataType>(50); 
    curRoot = curRoot->right; 
    curRoot->left = new TreeNode<DataType>(80, new TreeNode<DataType>(100), new TreeNode<DataType>(110)); 
    curRoot = root->right; 
    curRoot->left = new TreeNode<DataType>(60); 
    curRoot = curRoot->left; 
    curRoot->right = new TreeNode<DataType>(90, new TreeNode<DataType>(120), new TreeNode<DataType>(130)); 

    return root; 
} 
int main() 
{ 
    TreeNode<int> *treeRoot = BuildTree<int>(); 
    cin.get(); 
    return 0; 
}