本帖最后由 ffggddss 于 2020-1-19 12:46 编辑
问题已解决,语法没有问题,因为使用模版的的类,所以无法指定具体成员,类在class里面声明 所以也只能在里面使用. 外部成员函数做返回值是肯定不行的.
template <class T>
class MyClass
{
public:
MyClass();
~MyClass();
typedef struct mystruct
{
T x;
T y;
}_mystruct,*Pmystruct;
Pmystruct mlist;
};
template <class T>
MyClass<T>::MyClass()
{
mlist = new mystruct;
mlist->x = 10;
mlist->y = 15;
}
template <class T>
MyClass<T>::~MyClass()
{
delete mlist;
}
void test()
{
MyClass<int> pp;
int x = pp.mlist->x;
int y = pp.mlist->y;
printf("%d %d \n" ,x,y);
}
使用的vs2015编译, 编译可以通过,没有报错,但是在方法里 使用mlist->x 的时候提示没有成员,写好mlist->x=10; 编译也是可以通过,运行也没有问题.
请问怎么回事,如何修改.
再看看下面的代码
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();
//}```
|