为什么我不能使用嵌套在struct中的struct作为类来在类模板中声明变量?

时间:2015-06-01 05:10:39

标签: c++ class templates struct nested

你看,我喜欢结构,所以我在结构中放置了一些结构,并尝试在类模板中使用这些嵌套结构来声明一些变量。唯一的问题是:它似乎没有按预期工作。这是我的最小示例代码:

#include "stdafx.h"
#include <iostream>

struct T1
{
    struct NESTED
    {
        int var1 = 12345;
    };
};

struct T2
{
    struct NESTED
    {
        float var1 = 67890;
    };
};


template <typename T > class Proletarian
{
public:
    T * t;                                       //works
  //T::NESTED * tn;        ****** doesn't work! *******
    Proletarian<typename T>()
    {
        T::NESTED * tNested = new T::NESTED;     //works
        std::cout << tNested->var1;
    }

};

int _tmain(int argc, _TCHAR* argv[])
{
    Proletarian<T1> t1 = Proletarian<T1>();
    Proletarian<T2> t2 = Proletarian<T2>();

    return 0;
}

我使用Visual Studio 2013,Intellisense可以使用我的代码,但它只是因为这两个错误而无法编译:

  

[第20行第1列]错误C2143:语法错误:缺少&#39 ;;&#39;之前&#39; *&#39;

     

[第20行第1列]错误C4430:缺少类型说明符 - 假定为int。注意:C ++没有   支持default-int

我对C ++并不擅长,所以可能不太了解模板的工作原理以及实际发生这种情况的原因。

1 个答案:

答案 0 :(得分:1)

当编译器首次通过无产阶级时 - 在它看到特定类型T的实例化之前 - 需要帮助才能知道T::NESTED将引用某种类型,您可以使用{ {1}}如下:

typename