当我尝试编译它时(g ++):
template<typename T>
struct A {
struct B { };
template<typename S>
friend A<S>& operator +(A<S> const &, A<S> const &);
};
template<typename T>
A<T>& operator +(A<T> const &a, A<T> const &b) {
A<T>::B *x;
return a;
}
main() { }
我得到了
test.cpp: In function "A<T>& operator+(const A<T>&, const A<T>&)":
test.cpp:12:11: error: "x" was not declared in this scope
为什么?
[无视:如果我不包含这一行,堆栈溢出说我保存时我的帖子中有太多代码]
答案 0 :(得分:2)
编译器不知道A<T>::B
表示一个类型,所以它试图在那里进行乘法。
使用typename A<T>::B *x;