关于初始化数组

neverzhang 2007-04-26 11:55:04
类定义如下:
class CCorpStructInterpolate
{
public:
__int64 getTag() const {return m_nTotalTag;}
private:
__int64 m_nTotalTag;
};
通过如下语句获得:
__int64 size=g_pTrigram->getTag();
double pdProb[size];

以上语句报错:error C2057: expected constant expression;
error C2466: cannot allocate an array of constant size 0

谢谢
...全文
692 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
msgsnd 2007-04-26
  • 打赏
  • 举报
回复
长函数不能用来定义数组吧?
Benny_ywb 2007-04-26
  • 打赏
  • 举报
回复
m_nTotalTag未赋值
chenyu2202863 2007-04-26
  • 打赏
  • 举报
回复
error C2466: cannot allocate an array of constant size 0====>说明数组定义时大小没确定

不过我记得有中关于零元素的数组应用
yydrewdrew 2007-04-26
  • 打赏
  • 举报
回复
1.调用getTag()的实例应该为const
2.数组定义时要其大小要确定,不然编译器会报错/
ouyh12345 2007-04-26
  • 打赏
  • 举报
回复
double pdProb[size];
定义数组时,编译器要知道数组的大小,很明显,楼主的程序做不到这点。
xxyifan 2007-04-26
  • 打赏
  • 举报
回复
编译时要编译器要知道size的明确大小,最后当然要delete[] 数组名
xlbdan 2007-04-26
  • 打赏
  • 举报
回复
编译,链接通过了,但是运行是貌似是内存泄露了

最后要delete []pdProb;
xlbdan 2007-04-26
  • 打赏
  • 举报
回复
__int64 size=g_pTrigram->getTag();


楼主这句交待不够,g_pTrigram的定义在哪里?

我觉得可以改成这样:


class CCorpStructInterpolate
{
public:
CCorpStructInterpolate(int size):m_nTotalTag(size){} //缺省构造函数
__int64 getTag() const {return m_nTotalTag;}
private:
__int64 m_nTotalTag;
};
int main()
{
CCorpStructInterpolate *p=new CCorpStructInterpolate(5); //为新对象分配内存,并
__int64 size=g_pTrigram->getTag(); //用5来初始化
double *pdProb=new double[size]; //用动态分配内存来建立此数组
return 0;
}
neverzhang 2007-04-26
  • 打赏
  • 举报
回复
貌似是:
__int64 getTag() const {return m_nTotalTag;}
这条语句出问题了
neverzhang 2007-04-26
  • 打赏
  • 举报
回复
我改成如下格式:
__int64 size=g_pTrigram->getTag();
double* pdProb=new double [size+1];

编译,链接通过了,但是运行是貌似是内存泄露了

65,212

社区成员

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

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