C ++中的模板类和方法

时间:2015-03-16 17:27:12

标签: c++ templates binary-tree

我已经使用C#大约一年了,我正试图在Visual Studio中继续使用C ++。无论如何,我试图在C ++中创建一个通用的二叉树,并遇到一些我似乎无法解决的编译错误。

最初的研究似乎指向将类模板放在头文件中,但这给了我许多其他错误。

非常感谢来自具有更多经验的人的一些建议。

由于

到目前为止,这是代码。

#include "stdafx.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    TreeNode<int> IntTree(1, TreeNode<int>(1), TreeNode<int>(2));
    cout << IntTree.toString() << endl;
    return 0;
}


template<class TData> class TreeNode
{

private:
    TData Data;
    TreeNode<TData>& Left;
    TreeNode<TData>& Right;

    void setData(TData data)
    {
        Data = data;
    }

public:
    TreeNode<TData>(TData data)
    {
        setData(data);
    }

    TreeNode<TData>(TData data, TreeNode<TData> leftNode, TreeNode<TData> rightNode)
    {
        setData(data);
        setLeft(leftNode);
        setRight(rightNode);
    }

    void setLeft(TreeNode<TData>& leftNode)
    {
        Left = leftNode;
    }

    void setRight(TreeNode<TData>& rightNode)
    {
        Right = rightNode;
    }

    TreeNode<TData>& getLeft()
    {
        return Left;
    }

    TreeNode<TData>& getRight()
    {
        return Right;
    }

    TData& getData()
    {
        return &Data;
    }

    string toString()
    {
        return Left->toString() + Data + Right->toString();
    }
};
error C2228: left of '.toString' must have class/struct/union.
error C2065: 'TreeNode' : undeclared identifier.
error C2065: 'IntTree' : undeclared identifier
error C2062: type 'int' unexpected.

1 个答案:

答案 0 :(得分:2)

_tmain() TreeNode<>的使用尚未宣布。

您必须在_tmain()之前放置完整的模板类声明/定义,或者更好地将其放在单独的头文件中,并包括它。