我最近开始学习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
使用具体的数据类型构建树的具体实例。请帮我理解我的错误。
请不要注意使用后我没有记忆的事实。那只是一个草案。
答案 0 :(得分: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>();
答案 1 :(得分: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;
}