MSVC 2008不会编译以下代码:

template <class Derived>
struct B
{
   typename Derived::type t;
};

struct D : B<D>
{
   typedef int type;
};

void main()
{
   D d;
}

我得到的错误是“错误C2039:'类型':不是'D'的成员”。有任何想法吗?

最佳答案

因为B需要D的完整类型定义才能被定义。

您可能期望的内容如下:

template <class Derived>
struct B
{
   B() {
     typename Derived::type t;
   }
};

struct D : B<D>
{
   typedef int type;
};

void main()
{
   D d;
}

之所以可行,是因为在实例化D()(并因此实例化B())时,编译器具有类型的完整定义。

09-10 04:07
查看更多