2

我有一段代码:

int CPUs = GetNumCPUs();
FILE *newFile[CPUs];

我有一个错误。它在第二行标记了“CPU”并说:“表达式必须具有恒定值”。

我曾尝试使用const,但它不工作。

4

6 回答 6

5

You can't have a varible sized array in C++. Adding const to CPUs doesn't help, it only makes the variable read-only, but it's still not a compile time constant because it's initialized by a function at run-time.

The usual solution is to use a vector:

std::vector<FILE*> newFile(CPUs);
于 2013-07-23T17:00:18.523 回答
3

GetNumCPUs()每次运行程序时,它的值可能会或可能不会改变 - 所以它不是恒定的。如果您想要一个具有可变数量元素的数组,请尝试std::vector

std::vector<FILE*> newFile(GetNumCPUs());
于 2013-07-23T16:59:45.060 回答
2

在您的代码中,const并不意味着“恒定”。在这种情况下,这意味着该对象是只读的——即您不能修改该对象。您正在尝试创建一个可变长度数组,这在 C++ 中是不允许的。使用std::vector,使用new来分配内存,或者编写一个 C99 程序,其中允许像您尝试制作的 VLA。

于 2013-07-23T16:59:49.750 回答
0

在这种情况下,使用 aconst并不能解决您的所有问题。问题是数组必须在编译时初始化,所以如果你有一个函数返回一个变量(GetNumCPUs())并将它分配给一个常量(const int CPUs),这个变量在编译时是未知的,但在运行时是未知的,编译器不能为数组分配数据空间。

std::vector但是,使用允许可变存储空间。

std::vector<FILE*> newFile(CPUs);

这应该可以正常工作。这里有几个教程:

http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027/C-Tutorial-A-Beginners-Guide-to-stdvector-Part-1.htm

http://www.dreamincode.net/forums/topic/33631-c-vector-tutorial/

于 2013-07-23T17:16:10.287 回答
-2

You should dynamically create the array with new[]

int CPUs = GetNumCPUs();
FILE** newFile = new (FILE*)[CPUs];

After you're done with it, you're now responsible for deleting it as well:

delete[] newFile;
于 2013-07-23T16:59:59.183 回答
-2

CPU 在编译时是未知的。

于 2013-07-23T16:59:18.737 回答