Я использую C# около года, я пытаюсь перейти на C++ в visual studio. Во всяком случае, я пытаюсь создать родовое двоичное дерево на C++ и столкнулся с несколькими ошибками компиляции, которые я не могу исправить.Шаблон Классы и методы в C++
Первоначальные исследования, казалось, указывали на то, что шаблон шаблона находится внутри файла заголовка, но это дало мне множество других ошибок.
Некоторые советы от кого-то, у кого больше опыта, будут очень оценены.
Thanks
Это код.
#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.
У C++ нет дженериков, у него есть шаблоны. – Mgetz
Объявление декларации TreeNode должно появиться перед 'main()'. C++ использует компилятор с одним пропуском, поэтому, если нет какого-то слова, говорящего о том, что такое TreeNode, когда компилятор первым обнаруживает его, он выдает ошибку. – NathanOliver
Благодарим за техническое объяснение, так как теперь я могу понять, в чем заключается цель декларации или даже лучше запомнить объявить все типы выше основного метода. –