1

我使用Xcode工作,但现在我想学习和使用Visual Studio C++,我的第一个挑战是通过函数及其大小作为参数发送和排列,我该如何完成?

void Llena2(int R, int C, int (*XY)[C]); //in xcode

void Llena2(int R, int C, int (*XY)[C]); //error C2057: expected constant expression
                              //error C2466: cannot allocate an array of constant size 0

是否可以做一些类似于xcode的事情?提前致谢

4

3 回答 3

4

在这种情况下,您应该使用 std::vector。

编辑:

根据ISO C 和 ISO C++ 之间的不兼容性,此功能:void test(int R, int C, int (*XY)[R][C])(VLA) 仅在 C99 中有效,但在 C++ 中无效。

C99 还为 VLA 类型的函数参数提供了新的声明语法,允许变量标识符或“*”出现在数组函数参数声明的括号内,以代替常量整数大小的表达式。

...

C++ 不支持 VLA。

Xcode 默认使用 C99,因此在 Xcode 中有效。

于 2013-06-05T10:56:44.350 回答
1

您正在函数中初始化一个新数组。数组(几乎)是一个指针。因此你可以写:

void Llena2(int R, int C, int *XY);
于 2013-06-05T11:01:37.030 回答
0

令人惊讶的是 XCode 允许这样做。

C恒定的吗?如果是这样,您可以将C参数转换为非类型模板参数:

#include <cstddef>

template <std::size_t C>
void Llena2(int R, int XY[][C]);

编译器会以这种方式在编译时自动推断C,但这仅适用于最外层维度。

于 2013-06-05T11:35:29.707 回答