0

expected constant expression我正在使用 gcc 编译器在 Linux 上的 Netbeans 中开发一个程序,当在 Windows 7 上切换到 Visual C++ 时,代码无法编译,因为 Visual C++在几行上说它。在 Netbeans 上,我只是做了类似的事情char name[fullName.size()];,而在 Visual C++ 上,我尝试了,除其他外,

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

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

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

4

4 回答 4

2

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

解决方案包括:

  • 在堆上创建它
  • 让它保持不变

新的 C++ 标准 (C++0x) 提出了一个“常量表达式”功能来处理这个问题。有关更多信息,请查看内容。

于 2010-03-19T21:43:05.233 回答
1

C++ 要求在编译时知道数组的大小。如果您不介意使用非标准扩展,gcc 确实允许像您正在执行的代码(请注意,虽然它不是标准的 C++,但它在 C 中标准的,从 C99 开始)。

我还猜想你可以使用一个向量(在这个特定的地方),而不是你想象的那么麻烦——为数组编写的相当多的代码可以与向量一起使用,只需重新编译,而且很少或者根本不重写。

于 2010-03-19T21:46:16.483 回答
1

在 VC++ 中,你不能做堆栈数组大小的运行时声明,但是你可以通过_alloca来做堆栈分配

所以这:

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

变成这样:

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

这并不完全相同,但它与您在 VC++ 中所获得的一样接近。

于 2010-03-19T21:46:33.380 回答
0

char name[fullName.size()];是一个可变长度数组的例子 - 据我所知 - 在 C++ 中没有标准化,所以你受编译器的支配。[稍微偏离主题,它们是 C99 标准的一部分]

于 2010-03-19T22:58:01.963 回答