带有友元运算符的模板化类的嵌套类,编译错误

时间:2013-02-25 09:40:27

标签: c++ templates compiler-errors nested-class

当我尝试编译它时(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

为什么?

[无视:如果我不包含这一行,堆栈溢出说我保存时我的帖子中有太多代码]

1 个答案:

答案 0 :(得分:2)

编译器不知道A<T>::B表示一个类型,所以它试图在那里进行乘法。

使用typename A<T>::B *x;