为什么以下代码给我一个错误(g 4.1.2)?
template<class A> class Foo { public: typedef std::vector<A> AVec; AVec* foo(); }; template<class A> Foo<A>::AVec* Foo<A>::foo() { // error on this line return NULL; }
错误是:
error: expected constructor,destructor,or type conversion before '*' token
我应该如何定义Foo< A> :: foo()函数否则(具有正确的返回类型)?
解决方法
这是一个叫“
two-stage lookup”的问题.基本上,由于A是foo()定义中的模板参数,所以编译器首次无法知道解析模板,无论Foo A :: AVec是一个类型还是存在(因为例如,则可能存在不包含typedef的Foo>专业化).它只会知道模板实例化过程中会发生什么,这在后期发生 – 现在为时已晚.
template<class A> class Foo { public: typedef std::vector<A> AVec; AVec* foo(); }; template<class A> typename Foo<A>::AVec* Foo<A>::foo() { return NULL; }
原文地址:https://www.jb51.cc/c/114720.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。