我正在使用GCC编译器在Linux上的NetBeans进行一项程序,当时,在Windows 7上切换到Visual C ++时,该代码无法编译,因为Visual C ++说明了这一点 expected constant expression 在几行。在Netbeans上,我只是做了类似的事情 char name[fullName.size()];, ,在视觉C ++时,我尝试了

const int position = fullName.size();
char Name[position];

如何创建用于数组的常数?

注意:我知道 这个问题, ,但是有什么办法可以在不使用向量的情况下进行此操作,因为这需要重写程序的许多部分?

有帮助吗?

解决方案

在VC ++中,您不能执行堆栈数组大小的运行时声明,但是您可以通过 _Alloca

所以这:

const int position = fullName.size();
char Name[position];

变成了:

const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));

这不是完全一样的事情,但是它与您要进入VC ++一样近。

其他提示

这在VC ++中是不可能的。我知道,很伤心:(

解决方案包括:

  • 在堆上创建它
  • 使其稳定

新的C ++标准(C ++ 0x)提出了一个“常数表达式”功能来处理此功能。有关更多信息,请检查 这个 出去。

C ++要求在编译时知道阵列的大小。如果您不介意使用非标准扩展名,GCC确实允许像您这样做的代码(请注意,虽然不是标准的C ++,但 C99)。

我还猜想,您可以使用比您想象的要少的麻烦(在这个特定的地方) - 为数组编写的很多代码可以与矢量一起使用,只有重新编译,也可以使用。或根本没有重写。

您的 char name[fullName.size()]; 是一个例子 可变长度阵列 据我所知,这不是在C ++中标准化的,因此您可以受到编译器的摆布。 [略有主题是C99标准的一部分

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top