C++怎么在结构体里定义动态数组

请问:1.C++可否在结构体定义的时候建立动态数组;2.C++可否在主函数中定义结构体的动态数组。分别对这两种情况写了两段代码,但是都有问题。1:structRange{... 请问:1.C++可否在结构体定义的时候建立动态数组;2.C++可否在主函数中定义结构体的动态数组。分别对这两种情况写了两段代码,但是都有问题。
1:

struct Range
{
float *min=new float[c];
float *max=new float[c];
};
struct Gcell
{
int iNum;
Range ran;
};
void main()
{
int c=4;
Gcell *Cell=new Gcell[J];
}
2:
struct Range
{
float min,max;
};
struct Gcell
{
int iNum;
Range ran;
};

void main()
{
int i,c=4,J=50;
Gcell *Cell=new Gcell[J];
for(i=0;i<J;i++)
{
float *Cell[i].ran.min=new float[10];
}
}
展开
 我来答
风若远去何人留
推荐于2016-11-15 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部

可以在结构体中添加指针类成员变量,并在成员函数中实现动态数组的分配。

以下以一个仅实现整型动态数组,不包含其它功能的类为例做说明。

class array //类名
{
    public:
        int *v; //动态数组首地址。
        int length; //动态数组长度。
        array(int len)
        {
            
            if(len <= 0)//初始化长度非法。
            {
                length = 0;
                v = NULL; 
            }
            else
            {
                length = len;
                v = new int[length];//内存分配。
            }
        }
        ~array()
        {
            delete [] v;//析构中释放内存。
        }
};
水焱新火
推荐于2017-12-15 · TA获得超过256个赞
知道小有建树答主
回答量:144
采纳率:100%
帮助的人:125万
展开全部
首先,第一种情况不会出现 ,所谓结构体可以理解为一种特殊的,默认内部public的,并且不写方法和函数的类,当然你写方法也可以编译的,所以他就是一个类,而如果是数组在结构体中,那么指挥定义一个指针,而不会定义成实例数组,用的时候外部new,所以第一种情况会写成类,然后在构造函数里面new,析构里面delete
第二,是可以的,你写错的原因应该是在for'里面,因为你的结构体都是系统的类型,不是指针,是可以直接new得到,也就是说,你在new Gcell的时候就已经完全搞定了,不需要for,如果是想要修改的话,应该是(*Cell[i]).ran.min=123;这样,而不是再new
更多追问追答
追问
您好,不知道我是否理解了您的意思,主函数部分修改成下面这个样子,但运行还是报错:
int main()
{
int i,c=4,J=50;
Gcell *Cell=new Gcell[J];
for(i=0;i<J;i++)
{
Cell[i].ran.min=new float[c];
}
}
追答
不要new,直接等于c就可以了,他已经帮你new好了,在newGcell的时候就已经搞定了,因为他内部不是指针类型,顺带给你解释下上面仁兄的东西template  是模板,他的作用就是编译前自动生成代码,而不是运行时,所以你后面问的能不能c=4,然后  cell《c》是不可以的,模板传递过去的必须是一个常量或者一种类型,他并不能实现运行时候动态, 这里写4,那么编译的时候就是4,
模板具体用法你可以查百度,会比我说的详细
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zjfaok
2014-01-04 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1568万
展开全部
template <std::size_t c>
struct Range{ float min[c]; float max[c];};
template <std::size_t c>
struct Gcell{ int iNum; Range<c> ran;};

int main(){ Gcell<4> *Cell=new Gcell<4>[J];}
更多追问追答
追问
  1. template <std::size_t c> 这句是什么意思?

  2. 主函数中Gcell<4> *Cell=new Gcell<4>[J],可否改成int c=4;Gcell<c>*Cell=new Gcell<c>[J]

  3. 您的程序运行的时候有点问题还

追答
要在定义时固定数组长度就用上述代码,要动态决定数组长度就用
std::vector min;
std::vector max;
调用resize方法改变长度。要用main中的变量决定成员的初始长度的话,必须把变量传给Range的构造函数。

代码是在你提供的第一段代码的基础上改的,我自信不会引入新的错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式