试图调用模板类

时间:2016-04-27 10:23:03

标签: c++ templates friend

我有一个模板,其中我有一个朋友函数的声明,而在课堂之外,我已经实现了它:

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();

但是它说无法解决它。为什么?应该像这样看待朋友会员,他们不是吗?

修改

AVLTree<Post, postByLikesFunc, emptyFunc> empty;
empty = createEmptyTreeAVLTree<Post, postByLikesFunc, emptyFunc>(size);
empty.arrayToTree(sorted_posts);
它在Troll.cpp中的功能。

仍然没有在这个范围内宣布&#34;&#34;,&#34;功能无法解决&#34;,&#34;符号无法解决&#34;,&#34;预期的主要表达式,&#34;,&#34;预期的主要表达式在&gt;&#34;之前

1 个答案:

答案 0 :(得分: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的范围内。