c语言数组表达式必须是常量值,关于数组:表达式在c ++中必须有一个常量值错误...

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Is there a way to initialize an array with non-constant variables? (C++)

我有以下代码:

vector> vinciP;

int myLines = -1;

myLines = drawPolyLineFile("vinci.dat", vinciP);

if (myLines > -1)

{

cout <

SUCCESS";

vec2 vPoints[myLines];

for (int i = 0; i < NumPoints; ++i)

{

vPoints[i] = vinciP[0][i];

}

}

我在"vec2 vpoints[mylines]行中得到一个错误,这表示表达式必须有一个常量值。我不明白为什么会有这个错误,有什么帮助吗?

是因为我的线可能是负数吗?IDK。

vector> vinciP可能不在VC++编译。对于便携性,将是一个更好的做法,vector> vinciP

vec2 vPoints[myLines];

因为EDCOX1的0Ω不是一个const表达式(也就是说,它在编译时不知道),所以上面的代码声明了一个在C++中不允许的可变长度数组。只有C99具有此功能。编译器可能将此作为扩展(但不是标准C++)。

这种常见问题的解决办法是:使用std::vector作为:

std::vector vPoints(myLines);

现在应该可以了。

GCC将此可用作C++模式的扩展。让我吃惊的是,这个特性并没有将其管理成C++。

在C99中引入了VLA,C++是基于C98的,在C99引入VLA的时候,C++已经有向量,所以他们从来没有迫切需要它。

Als,我不知道"C++是基于C98",我假设你指的是0x,也许我应该为这个问题创建一个单独的问题,但是STD::向量的存在并不能真正说服我VLAS的不可用性。

@ CaptainGiraffe:事实上,EDCOX1的0可用性可以在C++中提供很多倍,但是似乎有太多的工作要做才能使这些在C++中工作。下面是一个讨论这个问题的线索。

@CaptainGiraffe:不需要创建另一个主题:已经有人创建了这个主题。请参见:stackoverflow.com/questions/7458857/&hellip;

@ALS,非常相关的线索,谢谢。JS-李特又一次去营救了,不远了吗?是我的责任。我会在你的答复中提出一些反驳意见,但加起来我很好。

上面的c98是一个打字错误。C++是以C89为基础的。C++ 11采用了C99的一些特征,但没有VLAs。VLAs可能永远不会出现在C++中。考虑"无效FO(int(&;ARR)(10))";在C++中,数组的大小是其类型的一部分,并用于类型检查,而VLAs根本无法这样工作。

@Barnes是的(当然是C89)提供的链接使这些非C的复杂性非常清楚。谢谢。

是因为我的线可能是负数吗?不,这是因为myLines不是编译时常量。

说明:

vec2 vPoints[myLines];

创建一个可变长度的数组,其中myLines值将在运行时确定。在C++中不允许使用可变长度数组。这是C99中引入的一个特性,C++标准不支持它。一些C++编译器支持它作为一个扩展,但它仍然是非标准的一致性。

对于C++,数组的大小应该在编译时知道,因此必须是编译时常数。myLines不是编译时常量,因此是错误。

你应该使用一个STD::向量

因为静态数组需要一个静态(常量)大小,所以会出现这个错误。由于vPoints中的组件数量是动态的,因此考虑使用动态数组。或者最好还是坚持使用vector。

C++没有可变长度数组。数组的大小必须在编译时确定。EDOCX1的值(0)只在运行时知道,因此这不起作用。

要使数组只有在运行时才知道其大小,请使用std::vector。

std::vector vPoints(myLines);

vec2 vPoints[myLines];

数组大小必须是编译时常量。myLines不是编译时常量。相反,使用新的甚至更好的内存分配来使用std::vector。

使用new是错误的!不要使用new,学习没有new编程。这里不需要new!

+ 1,我知道EDOCX1,1,EDCOX1,6,C++。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值