template <class T>
class A {
struct B {
T a,b;
}
B& operator+ (B & x, B & y) {
return B(x.a + y.a, x.b + y.b);
}
int funcA (B & x, B & y){
return (x + y).a;
}
};
ご想像のとおり、コンパイル中に「operator+ はゼロまたは 1 つの引数を取る必要があります」というメッセージが表示されます。右。operator+ では、「this」が最初の引数として渡されるためです。したがって、解決策は、クラス A 定義の外に演算子を配置することです。ただし、A の関数 funcA は operator+ を使用します。したがって、A の前に定義する必要があります。ただし、operator+ 自体は、テンプレート自体である A で定義されたクラス B を使用し、B は依存クラスです。
解決策は何ですか?