请问: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];
}
}
å¯ä»¥å¨ç»æä½ä¸æ·»å æéç±»æååéï¼å¹¶å¨æåå½æ°ä¸å®ç°å¨ææ°ç»çåé ã
以ä¸ä»¥ä¸ä¸ªä» å®ç°æ´åå¨ææ°ç»ï¼ä¸å å«å ¶å®åè½ç类为ä¾å说æã
class array //ç±»å您好,不知道我是否理解了您的意思,主函数部分修改成下面这个样子,但运行还是报错:
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,
模板具体用法你可以查百度,会比我说的详细
您好,您说的应该具体怎么改?我把new删了还是不对,直接用也不行。您可否帮我简单的写一下?
结构体定义同问题2.主函数如下,调试出错
int main()
{
int i,c=4,J=50;
Gcell *Cell=new Gcell[J];
for(i=0;i<J;i++)
{
Cell[i].ran.min[c]=i;//new float[c];
}
}
哦~~可能是我没有表述清楚,我的意思是对于min、max再建立一个动态数组,调用时相当于这样的形式:cell[i].ran.max[j],cell[i].ran.min[j]
追答学过类吗?用类来写,逻辑更好,没有只能这么改
struct Rangetemplate <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的构造函数。
代码是在你提供的第一段代码的基础上改的,我自信不会引入新的错误
感谢您的耐心解答。我对vector的用法不是很了解,大概查了一下也没太明白。按您的程序改成动态的话整体程序应该是什么样子的?谢谢您了