私は友人の機能友達につくが
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」の前に
必要性「型名」を言ってエラーが出ますX 'は従属スコープです
何が問題なのですか? X<T>::Y
前typename
を置く:
template <typename T>
typename X<T>::Y fun(X<T> x){
return x.test;
}
X<T>::Y
の意味はT
上のタイプに依存しているため、コンパイラはX<T>::Y
が参照するかどうかを一般的に知ることができないあなたは、エラーが言う文字通り実行する必要があり
'Xは依存スコープであるため' X :: Y 'の前に 'typename'が必要です' 'X :: Y'の前に' typename'が必要です。 – DeiDei
'X 'は従属スコープです。 – Quentin