Каков синтаксис шаблонной рекурсивной функции? - PullRequest
2 голосов
/ 19 января 2012

Это сводит меня с пути на данный момент.Как домашнее упражнение я хотел создать шаблон рекурсивного вызова в классе.в .h файле у меня есть:

template <typename T1> 

    class BinaryTree 
    {
    public:
        BinaryTree(T1 element);
        ~BinaryTree();

    BinaryTree* addLeftLeaf(BinaryTree<T1>* node);

и т. д.

, затем в .cpp

template <typename T1> BinaryTree* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
    return node;
}

я пробовал, казалось бы, множество идей, нопока ничего.Просто ошибки, такие как ошибка C2955: «BinaryTree»: использование шаблона класса требует списка аргументов шаблона

Любые предложения будут любезно оценены.

Ответы [ 3 ]

8 голосов
/ 19 января 2012

В исходном файле вам нужно указать BinaryTree<T1> вместо BinaryTree. т.е.

template <typename T1>
BinaryTree<T1>* BinaryTree<T1>::addLeftLeaf(BinaryTree<T1>* node)
{
    return node;
}

Вы можете ссылаться только на шаблон без списка его параметров в теле класса / структуры.


Также следует помнить, что в целом плохая идея иметь в файлах .cpp неспециализированные шаблоны, потому что это означает, что люди не смогут неявно создавать их экземпляры (без #include * .cpp).

Как правило, в .cpp должны идти только специализированные шаблоны. Неспециализированные шаблоны должны жить в .h.

Если вы знаете, что делаете, и планируете создавать экземпляры шаблонов вручную, то непременно поместите тело в .cpp, но обычно это не то, что делают люди.

0 голосов
/ 19 января 2012

Тип возвращаемого значения не завершен, также требуется аргумент шаблона.

0 голосов
/ 19 января 2012

Вы не можете иметь определение функции шаблона в файле .cpp, оно должно быть в файле .h:)

также, Питер Александр прав в том, что нужно редактировать это определение функции висточник, я оставлю это его ответу, хотя:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...