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は、具体的なデータ型を使用して、tree の具体的なインスタンスを構築します。私の間違いを理解するのを手伝ってください。使用後にメモリを解放しないという事実に注意を払わないでください。それはただのドラフトです。

4

2 に答える 2

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>();
于 2012-06-03T11:40:21.047 に答える
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;
}
于 2012-06-03T11:43:43.447 に答える