2016-04-27 10 views
0

Ich habe eine Vorlage, in dem ich eine Erklärung eines Freundes Funktion haben, und niedriger, außerhalb der Klasse, ich habe es Realisierung ist:Der Versuch, einen Freund Funktion der Template-Klasse zu nennen

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) { ... } 

Was die Signatur um es irgendwo in anderen Dateien zu nennen?

Ich habe versucht:

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

aber es sagt, es ist es nicht auflösen konnte. Warum ? Freund-Mitglied sollte einfach so gesehen werden, nicht wahr?

EDIT:

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

, die in ihm in Troll.cpp ist seine Funktion.

schreit Still „wurde nicht in diesem Bereich erklärt“, „Funktion nicht aufgelöst könnte“, „Symbol couldnt nicht gelöst“, „erwartet vor primär Ausdruck“, „erwartet Primärausdruck vor>“

+0

löste es. genau wie Slardar gesagt hat. – KittyT2016

Antwort

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; 
} 

die createEmptyAVLTree ist nicht in den Anwendungsbereich der AVLTree.

+0

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

+0

ok, und wenn in anderen Datei main? Das ist, was ich gerade gemacht habe und in anderen Dateien kann es immer noch "nicht gelöst werden" – KittyT2016

+0

@ KittyT2016 Es funktioniert auch. Kannst du mir mehr Code zeigen? –

Verwandte Themen