我有一个模板,其中有一个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在它的功能。
仍会喊出“未在此范围内声明”、“函数无法解析”、“符号无法解析”、“之前应为主表达式”、“之前应为主表达式”
平均值。水电站
#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的范围内。
我试图使乘法运算符成为名为TVector3的模板类的朋友。我读过,我可以在类声明中声明朋友函数之前,对其进行前向声明,但我这样做的尝试是徒劳的。我知道我可以简单地定义friend函数而不是声明它,但我希望它能与前向声明技术一起工作。 特别是,我试图为我的案例实施这个解决方案。我发现这篇文章也是David Rodriguez给出的解决方案(第三个版本),但我不知道我做错了什么。 我使用'g temp
我无法让它工作: 无法编译,错误消息如下: 无效使用temping-id'运算符*
我正在学习一个视频教程,我想声明一个模板函数作为模板类的朋友。我不知道为什么代码会抛出错误。 编译器抛出错误。 错误: templates\u friends\u 38。cpp:在“void doSomething2(T)[T=int]”的实例化中:templates\u friends\u 38。cpp:40:19:此处需要templates\u friends\u 38。cpp:32:9:错误
我想知道如果函数的模板参数包括但不限于类的模板参数,如何使函数成为类的朋友并在类外定义函数。 例如,我有以下模板类和模板朋友函数: 如果我编译: 我会得到以下链接器错误:
我的C++代码示例中有一个很大的问题。“朋友”和“模板”有问题。 错误消息: Matrix.h:26:79:警告: 友元声明'std::oStream&MatrixClass::Operator<<(std::oStream&,const MatrixClass::Matrix&)'声明一个非模板函数[-wnon-template-friend]友元声明'std::oStream&Operator
考虑以下示例: 我的GCC 9.2.0无法编译并出现以下错误: 但是,工作正常。为什么会这样?如何使用显式模板参数调用foo?