我有以下情况:-
template<typename Derived, typename ValType>
class foo
{
public:
template<typename R>
bar<typename std::vector<R>::const_iterator> select()
{
std::vector<R> translation;
return bar<typename std::vector<R>::const_iterator>(std::move(translation));
}
};
template<typename T>
class bar
: public foo<bar<T>, typename std::iterator_traits<T>::value_type>
{
public:
bar(std::vector<typename std::iterator_traits<T>::value_type>&& vec)
{
}
};
从根本上来说,这是我正在使用CRTP且foo是mixin的概念证明。
问题是我相信我应该使用前向声明,但是我尝试了以下操作:-
class bar; // I didn't expect this to work
但是我确实希望它能工作:-
template<typename R>
class bar;
直到我真正调用select()为止,编译都很好
std::vector<int> enumerable_vector;
enumerable_vector.push_back(1);
enumerable_vector.push_back(2);
bar<typename std::vector<int>::const_iterator> baz(std::move(enumerable_vector));
baz.select<std::string>();
导致以下错误:-
错误错误C2027:使用未定义类型'foo :: bar'
任何帮助将不胜感激,谢谢!
错误错误C2027:使用未定义类型'foo :: bar'
该错误消息似乎表明,你向前声明嵌套类型bar
中foo
。您需要转发声明正确的类型(将的声明bar
移到的定义上方的名称空间级别foo
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句