我使用 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类似的事情?提前致谢
答案 0 :(得分:4)
在这种情况下你应该使用std :: vector。
修改强>
根据Incompatibilities Between ISO C and ISO C++,
此功能:void test(int R, int C, int (*XY)[R][C])
(VLA)仅在C99中有效,但在C ++中无效。
C99还为函数参数提供了新的声明语法 VLA类型,允许变量标识符或'*'出现在 数组函数参数声明的括号代替a 常数整数大小表达式。
...
C ++不支持VLA。
Xcode默认使用C99,因此在Xcode中有效。
答案 1 :(得分:1)
您正在初始化函数中的新数组。 数组(几乎)是一个指针。因此你可以写:
void Llena2(int R, int C, int *XY);
答案 2 :(得分:0)
令人惊讶的是,XCode允许这样做。
C
是否恒定?如果是这样,您可以将C
参数转换为非类型模板参数:
#include <cstddef>
template <std::size_t C>
void Llena2(int R, int XY[][C]);
编译器会在编译时以这种方式自动推断C
,但这仅适用于最外层维度。