为什么我不能使用嵌套在结构中的结构作为类型来声明类模板中的变量?
Why can't i use struct nested in a struct as a type to declare variable in a class template?
你看,我喜欢结构体,所以我把一些结构体放在结构体里面,并尝试在类模板中使用这些嵌套的结构体来声明一些变量。唯一的问题是:它似乎没有像预期的那样起作用。这是我的最小示例代码:
#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是ok与我的代码,但它只是不会编译与这两个错误:
[第20行第1列]错误C2143:语法错误:在'*'之前缺少';'
[第20行第1列]错误C4430:缺少类型说明符-假定为int。注意:c++没有支持default-int
我不太擅长c++,所以可能不太明白模板是如何工作的,以及为什么会发生这种情况。
当编译器第一次通过Proletarian -在它看到特定类型T
的实例化之前-它需要帮助知道T::NESTED
将引用某些类型,您可以使用typename
给它,如下所示:
template <typename T>
class Proletarian
{
public:
typename T::NESTED* tn;
Proletarian<T>()
{
typename T::NESTED* tNested = new typename T::NESTED;
std::cout << tNested->var1;
}
};
相关文章:
- 为什么 C++ 中的以下结构声明会导致退出 127?
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 结构声明中的 if 语句C++
- 这个嵌套结构声明是什么意思?
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 为什么结构声明在C++中违反了 ODR
- 错误:多个文件中的结构声明冲突
- 为什么调用定义的构造函数会导致结构声明中出现错误,我该如何修复它
- C++数据结构声明
- 相互依赖的结构声明
- 结构声明的数组
- 结构声明中的":"是什么意思
- 面向C++的main.cpp中的可视化结构声明问题
- 当某些结构字段被省略或与结构声明中的顺序不同时,如何实现正确的解析?
- 编译器在转发结构声明上出错
- C++生成器 XE4 中的结构声明
- 我无法理解c ++中的结构声明
- 嵌套结构声明以及如何访问它们
- 将包含单个数组的结构声明为packed有什么缺点吗
- 定义之前的结构声明