2016-04-27 8 views
0

У меня есть шаблон, в котором у меня есть объявление функции друга, и ниже, за пределами класса у меня есть его реализация:Попытки вызвать друг функцию шаблона класса

template<class TreeElement, class Comparator, class Operation> 
class AVLTree { 
public: 
    template<class A, class B, class C > 
    friend AVLTree<A, B, C> createEmptyAVLTree(int n); 
... 
} 
template<class A, class B, class C> 
AVLTree<A, B, C> createEmptyAVLTree(int n) { ... } 

Что такая подпись называть его где-то в других файлах?

Я пробовал:

AVLTree<Post, postByLikesFunc, emptyFunc>::createEmptyTree(); 

, но он говорит, что не может решить. Зачем ? Друг-член должен быть замечен именно так, не так ли?

EDIT:

AVLTree<Post, postByLikesFunc, emptyFunc> empty; 
empty = createEmptyTreeAVLTree<Post, postByLikesFunc, emptyFunc>(size); 
empty.arrayToTree(sorted_posts); 

это в Troll.cpp в его функции.

Еще кричит «не был объявлен в этой области», «Функция не может решить», «Символ не мог не решен», «ожидается первичное-выражение прежде», «ожидается первичное-выражение, прежде чем>»

+0

решил. как сказал Слдард. – KittyT2016

ответ

2

AVL.hpp

#ifndef AVL_hpp 
#define AVL_hpp 

template<class T1, class T2, class T3> 
class AVLTree { 
public: 

    template<class A, class B, class C> 
    friend AVLTree<A, B, C> createEmptyAVLTree(int n); 
}; 

template<class A, class B, class C> 
AVLTree<A, B, C> createEmptyAVLTree(int n) { 
    return AVLTree<A,B,C>(); 
} 

#endif 

main.cpp

#include "AVL.hpp" 

int main() { 
    createEmptyAVLTree<int, int, int>(4); 
    return 0; 
} 

createEmptyAVLTree не в рамках AVLTree.

+0

https://godbolt.org/g/h5CXHo –

+0

нормально, а главное в другом файле? Это то, что я сделал прямо сейчас, а в другом файле все еще «не удалось решить». – KittyT2016

+0

@ KittyT2016 Это тоже работает. Можете ли вы показать мне больше кода? –

 Смежные вопросы

  • Нет связанных вопросов^_^