所以代码是用于矩阵乘法
#include <iostream>
int FibbonaciOperator[2][2] = {
1, 0,
0, 1};
int FibbonaciStarter[2] = {
0, 1};
void multiply(int (&Matrix)[2][2], int (&Matrix2)[][2]) // int(&Matrix2)[2][2]
{
int MatrixRez[2][2] = {
0, 0, 0, 0};
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
MatrixRez[i][j] += Matrix[i][k] * Matrix2[k][j];
Matrix[0][0] = MatrixRez[0][0];
Matrix[0][1] = MatrixRez[0][1];
Matrix[1][0] = MatrixRez[1][0];
Matrix[1][1] = MatrixRez[1][1];
}
void FastExponentiation(int (&Matrix)[2][2], int exponent)
{
int temp[2][2] = {
0, 1,
1, 1};
for (int i = 30; i >= 0; i--)
{
multiply(Matrix, Matrix);
if (exponent & (1 << i))
multiply(Matrix, temp);
}
}
int main()
{
FastExponentiation(FibbonaciOperator, 5);
std::cout << FibbonaciOperator[1][0];
fflush(stdin);
std::cin.get();
return 0;
}
函数“multiply”的调用中“temp”给出错误。但是,当您替换函数中的第二个参数时,请在带注释的部分乘以
或确切地说,添加二维数组的完整尺寸错误会消失。
我的问题是为什么?
整个错误消息:
编辑:代码有些不同,但错误是相同的,现在错误在第二个论点上的两个地方出现“乘”的地方。
最佳答案
不允许使用未知范围的数组和已知范围的数组初始化对数组的引用。第二个参数
void multiply(int (&Matrix)[2][2], int (&Matrix2)[][2])
是对未知范围的数组的引用,并且int temp[2][2]
是已知范围的数组。这个电话multiply(Matrix, temp);
不允许。“可以形成对未知范围的数组的引用和指针,但是不能从对已知范围的数组和指针进行初始化或分配。”
https://en.cppreference.com/w/cpp/language/array#Arrays_of_unknown_bound
关于c++ - 代码给出了 “a reference of type…cannot be initialized with value…”,但是这个简单的解决方案解决了它。为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63534930/