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];
}
} 展开
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];
}
} 展开
3个回答
展开全部
首先,第一种情况不会出现 ,所谓结构体可以理解为一种特殊的,默认内部public的,并且不写方法和函数的类,当然你写方法也可以编译的,所以他就是一个类,而如果是数组在结构体中,那么指挥定义一个指针,而不会定义成实例数组,用的时候外部new,所以第一种情况会写成类,然后在构造函数里面new,析构里面delete
第二,是可以的,你写错的原因应该是在for'里面,因为你的结构体都是系统的类型,不是指针,是可以直接new得到,也就是说,你在new Gcell的时候就已经完全搞定了,不需要for,如果是想要修改的话,应该是(*Cell[i]).ran.min=123;这样,而不是再new
第二,是可以的,你写错的原因应该是在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,
模板具体用法你可以查百度,会比我说的详细
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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];}
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];}
更多追问追答
追问
template <std::size_t c> 这句是什么意思?
主函数中Gcell<4> *Cell=new Gcell<4>[J],可否改成int c=4;Gcell<c>*Cell=new Gcell<c>[J]
您的程序运行的时候有点问题还
追答
要在定义时固定数组长度就用上述代码,要动态决定数组长度就用
std::vector min;
std::vector max;
调用resize方法改变长度。要用main中的变量决定成员的初始长度的话,必须把变量传给Range的构造函数。
代码是在你提供的第一段代码的基础上改的,我自信不会引入新的错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询