ffggddss 发表于 2020-1-18 12:34

c++ 语法问题 求助 类模版中声明结构体的

本帖最后由 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();
//}```



nomoretime 发表于 2020-1-18 12:48

mlist = new mystruct,改为mlist = new _mystruct试下

huzpsb 发表于 2020-1-18 13:21


惊现假的VS?????????????

JuncoJet 发表于 2020-1-18 14:51

huzpsb 发表于 2020-1-18 13:21
惊现假的VS?????????????

code::blocks

JuncoJet 发表于 2020-1-18 14:54


真VS也没问题,所以你的问题是什么问题

JuncoJet 发表于 2020-1-18 15:12

#include <iostream>
using namespace std;

template <class T>
class MyClass
{
private:
    typedef struct{
      T x;
      T y;
    }_mystruct,*Pmystruct;
public:
    MyClass();
    ~MyClass();
    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;
}

int main()
{
    MyClass<int> pp;
    int x = pp.mlist->x;
    int y = pp.mlist->y;
    printf("%d%d \n" ,x,y);

}

ffggddss 发表于 2020-1-18 17:48

JuncoJet 发表于 2020-1-18 15:12
#include
using namespace std;



你看构造函数的地方 mlist->x=10;
正常使用指针 -> 编译器应该是自动弹出成员的, 但是这个不会..会提示没有成员.我的VS2015..虽然编译没问题 只是代码写的时候心里总是没底.

ffggddss 发表于 2020-1-18 17:50

nomoretime 发表于 2020-1-18 12:48
mlist = new mystruct,改为mlist = new _mystruct试下

还是不行,编译器还是提示没有成员. 不知道怎么回事. 你的编译器可以提示么,版本呢我的VS2015

ffggddss 发表于 2020-1-18 17:52

huzpsb 发表于 2020-1-18 13:21
惊现假的VS?????????????

我说了编译跟运行都没问题,但是写代码的时候,你在方法里使用那个mystruct的指针 都显示无法显示成员,你看构造函数里,你试下 mlist-> 能出成员么,我不知道是不是我语法有问题,心里很没底,!

ffggddss 发表于 2020-1-18 17:54

huzpsb 发表于 2020-1-18 13:21
惊现假的VS?????????????

而且这只是简略代码,就是反映一下遇到的问题,因为不能显示构造函数的成员,后面所有的方法,如果是返回的 mystruct* 指针的成员函数都是无法编译的,但放在class里面 却可以编译.
页: [1] 2
查看完整版本: c++ 语法问题 求助 类模版中声明结构体的