我有以下代码:
template <typename T>
class A
{
typedef typename T::Type MyType;
};
template <typename T>
class B : public A<B<T>>
{
typedef T Type;
};
当我尝试实例化B时,我收到以下使用MSVS 2015的错误消息:
'Type': is not a member of 'B<int>'
此代码是有效的C ++还是MSVS正确?
答案 0 :(得分:3)
问题在于此时
{
"_id" : "00e8da9b",
"Count" : NumberInt(2)
}
{
"_id" : "0ab42f88",
"Count" : NumberInt(13)
}
template <typename T>
class A
{
typedef typename T::Type MyType;
^^^
};
需要是一个完整的类型。但在您的情况下,T
在此处实例化时:
A<T>
template <typename T>
class B : public A<B<T>>
^^^^^^^
还不是一个完整的类型!所以这不可能不幸。
简单的解决方案就是单独传递B<T>
:
Type