关于c++模板成员的问题
我写了如下的一段代码:
- C/C++ code
#include <iostream>#include <typeinfo>#include <string>template<typename T> class A{public: A(int i = 0):value(i){} int get_value(){return value;}private: int value; template<typename Type> struct B; B<T> *bptr;};template<typename T> template<typename Type> struct A<T>::B{ B():str("hello world"){} void set_str(const char * s); const B *return_B();private: std::string str;};template<typename T> template <typename Type>void A<T>::B<Type>::set_str(const char * s){ str = s;}/**/template<typename Type> template <typename T> const A<Type>::B<T> *A<Type>::B<T>::return_B()//如果把const拿到*前面就可以编译通过{ return new B();}const int fun(){ return 4;}int main(){ return 0;}这个在gcc下不可以编译通过,但是把那个函数定义出的const拿到*前面就可以了,不知道是怎么回事。因为这一点都搞了一个上午了,也没有搞清楚是为什么,还有就是改正之后再gcc下编译通过,在vs2010下也不能编译通过,求各位高手能不理赐教,不胜感激。
[解决办法]
const夹在中间,gcc无法识别B是template, 猜测原因可能如此。 蛇穿了马甲,gcc不认了。