首页
社区
课程
招聘
未解决 [求助]求教下C++语法问题 模板类中声明的结构
发表于: 2020-1-18 12:22 2566

未解决 [求助]求教下C++语法问题 模板类中声明的结构

2020-1-18 12:22
2566

模版类中声明的结构体   编译没问题 运行也没问题


就是在 结构体在方法里使用的时候编译器会提示没有成员.


这里是重现问题的简略代码 

编译器在mlist->的时候 会提示没有成员 ,但写上mlist->x=10; 编译也可以通过.

不知道什么原因.

这样虽然可以编译, 但如果有成员函数是返回的 mystruct* 的指针 都是无法通过编译的. 但这种返回 mystruct*指针的方法卸载class里

不是写在类外 就可以编译.

 



template <class T>
class MyClass
{
public:
	MyClass();
	~MyClass();


	typedef struct mystruct
	{
		T x;
		T y;

	}_mystruct,*Pmystruct;
	Pmystruct mlist;
	//Pmystruct GetIndex(int pIndex) 这样无法编译 
	Pmystruct GetIndex(int pIndex)  //把方法写在类里 就可以编译
	{

	}

};
template <class T>
MyClass<T>::MyClass()
{
	mlist = new mystruct;
	mlist->x = 10;
	mlist->y = 15;
	// 这里 mlist-> 编译器无法自动弹出成员 提示没有成员
}
template <class T>
MyClass<T>::~MyClass()
{
	delete mlist;
}

//template<class T>
//Pmystruct MyClass<T>::GetIndex(int pIndex)  //写在类外 无法编译
//{
//	return Pmystruct();
//}






[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-1-18 18:02 被ffggddss编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
2
模板特性就这样的。。。还有你的结构体都没作用域 你这样子正常写也编不过
2020-1-18 19:33
0
雪    币: 2726
活跃值: (1110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Tennn 模板特性就这样的。。。还有你的结构体都没作用域 你这样子正常写也编不过
现在是正常编译,运行.
结构体里的成员也套用模版后,成员函数里 ->指针的时候无法显示成员,但是可以编译,运行, 均无错 .

2020-1-18 20:02
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
4
你分开理解 我没你这个有错 
1.这是由于模板特性带来的问题  你可以使用vs2019一个功能解决  或者可以使用模板其它特性解决这个问题  
2. GetIndex这个函数写在外面时找不到Pmystruct声明 我说你这个有错


2020-1-18 22:28
1
雪    币: 47
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
1. 你的mystruct 跟 T  相关, T没有具体类型时, 根本不存在所谓的mystruct, 自然 mylist->x 是没有代码提示的
2. mystruct 跟T相关, 而T跟myclass相关, 所以只能在myclass内部使用mystruct, 把它当返回值肯定不行
2020-1-19 09:32
1
雪    币: 2726
活跃值: (1110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢,理解怎么回事了.
2020-1-19 12:44
0
游客
登录 | 注册 方可回帖
返回
//