简单语法问题

chiwa737 2009-04-30 10:27:52
static void solveNaturalCubicSpline(Point *p, unsigned int count, float **coeff)
{

float h[count - 1];
... ...

count参数从函数传进来, 然后根据这个数量初始化array h, 但是这样编译出错, 我又不喜欢使用new, 因为还要delete, 有时候会忘。有什么解决方案吗。
...全文
92 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
BuleRiver 2009-05-01
  • 打赏
  • 举报
回复
用动态分配内存,如果用STL中的容器,其实本质上也是动态分配。
当然也可以用其他的办法,但是要改变这个函数的声明和定义:

template <int count>
static void solveNaturalCubicSpline(Point *p, float **coeff)
{
float h[count - 1];
//... ...
}
// 调用的适合这样用:这里假设count = 10
solveNaturalCubicSpline<10>(p, coeff);
windsting 2009-04-30
  • 打赏
  • 举报
回复
LZ对于数组初始化的理解错了,初始化数组需要的是编译期常量,
这样编译器才知道调用这个函数的时候,把栈顶的指针移动多少来产生需要的空间,
即便用运行期的常量,编译期的时候编译器根本不知道这个数是多少,
又怎么可能知道要分配多少空间给这个函数呢?

你这个问题很好解决,如果new出来的数组能够适用,用vector就可以很好的替代它,
至于vector要怎么用...基本上目前好一点的C++入门书都在最初的几章讲了,自己去看看吧。
  • 打赏
  • 举报
回复
你不喜欢用new,动态的数组就用vector好了。
jackzhhuang 2009-04-30
  • 打赏
  • 举报
回复
是啊,用vector或者new。

再不会,就声明一个很大的数组,当然要在允许范围内。
lpf000 2009-04-30
  • 打赏
  • 举报
回复
用new吧 很多时候要用的,逃避问题不是办法,多用就习惯了。
liliangbao 2009-04-30
  • 打赏
  • 举报
回复
float h[count - 1]; //不是你想在运行中分配空间就只能用new/malloc,你这样静态分配就必须给出明确的大小(常量),
//这样才能在编译时就确定数组的大小
nwao7890 2009-04-30
  • 打赏
  • 举报
回复
unsigned int - int 会发生类型转换 ,可能会发生溢出吧
nwao7890 2009-04-30
  • 打赏
  • 举报
回复
unsigned int count
float h[count - 1]; //是不是这里跟unsigned int 类型有关系
tangxu12 2009-04-30
  • 打赏
  • 举报
回复
list吧

或者传指针
pengzhixi 2009-04-30
  • 打赏
  • 举报
回复
用vector

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧