我想使用友元函数
返回一个嵌套的类对象template <typename T>
class X{
public:
class Y{
public:
int y;
}test;
public:
X(){
test.y=10;
}
template <typename U>
friend Y fun(X<U>);
};
template <typename T>
X<T>::Y fun(X<T> x){
return x.test;
}
但我收到错误
在'X :: Y'之前需要'typename',因为'X'是一个依赖范围
有什么问题?
答案 0 :(得分:1)
您需要按字面意思执行错误所说的内容:在typename
之前放置X<T>::Y
:
template <typename T>
typename X<T>::Y fun(X<T> x){
return x.test;
}
由于X<T>::Y
的含义依赖于T
,编译器通常无法知道X<T>::Y
是指类型名还是变量。在这种情况下,规则是如果您希望它是typename,则必须使用typename
关键字明确说明。
答案 1 :(得分:0)
你必须写
template <typename T>
typename X<T>::Y fun(X<T> x){
return x.test;
}
因为如果Y
已归档或输入,则compouse程序无法解析。