吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1348|回复: 10
收起左侧

[已解决] c++ 语法问题 求助 类模版中声明结构体的

[复制链接]
ffggddss 发表于 2020-1-18 12:34
本帖最后由 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
JuncoJet 发表于 2020-1-18 14:51
JuncoJet 发表于 2020-1-18 14:54
Image 523.jpg
真VS也没问题,所以你的问题是什么问题
JuncoJet 发表于 2020-1-18 15:12
[C++] 纯文本查看 复制代码
#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
[mw_shl_code=cpp,true]#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里面 却可以编译.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 21:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表