将未初始化的变量传递给函数,数组作为参数
Passing non-initialised variable to function with array as argument
对C++来说相当新。我在代码的开头有这些声明:
#include <iostream>
#include <iomanip>
using namespace std;
int m, n;
void indtastVektor(double A[m]);
void indtastMatrix(double A[m][n]);
我的主要看起来像这样:
int main() {
string svar;
do {
cout
<< "Ønskes indtastning af en vektor eller en matrix? Tast v for vektor og m for matrix: ";
svar = cin;
if (svar == "v" or svar == "V") {
cout << "Indtast det ønskede antal rækker i vektoren som heltal: ";
cin >> m;
double vektor[m];
indtastVektor(vektor);
break;
} else if (svar == "m" or svar == "M") {
cout << "Indtast det ønskede antal rækker i matricen som heltal: ";
cin >> m;
cout << "Indtast det ønskede antal søjler i matricen som heltal: ";
cin >> n;
double matrix[m][n];
indtastMatrix(matrix); // This line of code gives me an error
break;
} else {
cout << "Intet gyldigt svar indtastet - forsøg igen. n";
}
} while (true);
return 0;
}
行:indtastMatrix(matrix(; 给我以下错误:
调用"indtastMatrix"时没有匹配函数
基本上,该函数采用用户指定的 m 和 n,并使用这些值创建一个二维数组。Eclipse给了我这样的解释:
对于第一个参数,没有从"双精度 [m][n]"到"双精度 (*([n]"的已知转换void indtastMatrix(double A[m][n](;
这到底是什么意思?我想我可能还需要在主函数之前初始化 m 和 n?
让我感到困惑的是,这段代码没有返回任何错误:
cin >> m;
double vektor[m];
indtastVektor(vektor);
如果函数将一维数组作为参数,那么我为什么可以在运行时初始化变量并将其传递给函数,但如果它是二维数组,则不行?
谢谢!
您正在使用可变长度数组 (VLA(,这是一个非标准扩展。
请改用std::vector
。
void indtastVektor(std::vector<double>& v);
void indtastMatrix(std::vector<std::vector<double>>& v);
// ...
std::vector<double> vektor(m);
indtastVektor(vektor);
//...
std::vector<std::vector<double>> matrix(m, std::vector<double>(n));
indtastMatrix(matrix); // This line of code gives me an error
请记住,当您将数组传递给函数时,数组会衰减为指针。因此,数组数组衰减为指向数组的指针,类型sometype (*)[size]
其中size
是"内部"(二维(数组的大小。
但是,在编译时定义或声明函数时必须知道确切的大小。如果大小未知,您根本无法做到。不过,使用模板有一种解决方法:
template<std::size_t SZ>
void indtastMatrix(double (*A)[SZ]);
另请注意,可变长度数组在某些编译器中是非标准扩展。请改用std::vector
。
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中