gpt4 book ai didi

c++ - 代码给出了 “a reference of type…cannot be initialized with value…”,但是这个简单的解决方案解决了它。为什么?

转载 作者:行者123 更新时间:2023-12-02 10:11:09 35 4
gpt4 key购买 nike

所以代码是用于矩阵乘法

#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”给出错误。
但是,当您替换函数中的第二个参数时,请在带注释的部分乘以
或确切地说,添加二维数组的完整尺寸错误会消失。
我的问题是为什么?
整个错误消息:

a reference of type "int (&)[][2]" (not const-qualified) cannot be initialized with a value of type "int [2][2]"


编辑:代码有些不同,但错误是相同的,现在错误在第二个论点上的两个地方出现“乘”的地方。

最佳答案

不允许使用未知范围的数组和已知范围的数组初始化对数组的引用。第二个参数

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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com