你看,我喜欢结构,所以我在结构中放置了一些结构,并尝试在类模板中使用这些嵌套结构来声明一些变量。唯一的问题是:它似乎没有按预期工作。这是我的最小示例代码:
#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 ++并不擅长,所以可能不太了解模板的工作原理以及实际发生这种情况的原因。
答案 0 :(得分:1)
当编译器首次通过无产阶级时 - 在它看到特定类型T
的实例化之前 - 需要帮助才能知道T::NESTED
将引用某种类型,您可以使用{ {1}}如下:
typename