我正在跟随一个视频教程,想将模板函数声明为模板类的友元。我不知道为什么代码会抛出错误。
template<class T>class C;
template<class T>void doSomething2(T);
template<class T>class C{
int b;
friend void doSomething2(T);
};
template<class U>void doSomething2(U u){
C<U> obj;
obj.b=100;
}
int main()
{
C<int> obj;
int a=44;
doSomething2(a);
return 0;
}
编译器报错:
templates_friends_38.cpp: 在实例化 'void doSomething2(T) [with T = int]' 时: templates_friends_38.cpp:40:19: 需要在此处进行 templates_friends_38.cpp:32:9: 错误:'int C::b' 在此上下文中是私有的 obj.b=100; ~~~~^ templates_friends_38.cpp:25:9: 注意:此前声明为私有 int b; ^
注:该段内容涉及代码,如有疑问,请咨询相关技术人员。
doSomething2<U>
都是friend
吗?还是任何doSomething2<C<U>>
?或者只有doSomething2<C<T>>
或doSomething2<T>
? - Jarod42template <class T> class C;
和template<class U>void doSomething2(U)
(其中T
和U
可能相等或不相等,或者具有其他关系)。例如,doSomething2<int>
可能想要使用C<float>
。因为这些不同变体之间的语法略有不同。 - Jarod42