出现此错误时我该怎么办:“int”类型的参数与 C++ 中“int(*)[101]”类型的参数不兼容

Posted

技术标签:

【中文标题】出现此错误时我该怎么办:“int”类型的参数与 C++ 中“int(*)[101]”类型的参数不兼容【英文标题】:What should i do when i have this error: argument of type "int" is incompatible with parameter of type "int(*)[101]" in c++ 【发布时间】:2021-01-07 17:06:14 【问题描述】:
#include <iostream>
using namespace std;

void readMatrixA(int lenght)

    int matrixA[101][101];
    for (int i = 0; i < lenght; i++)
        for (int j = 0; j < lenght; j++)
            cin >> matrixA[i][j];


void readMatrixB(int lenght)

    int matrixB[101][101];
    for (int i = 0; i < lenght; i++)
        for (int j = 0; j < lenght; j++)
            cin >> matrixB[i][j];


void matrixMultiplication(int matrixA[101][101], int matrixB[101][101],int lenght)

    int i, j, matrixC[101][101];
    if (lenght <= 2)
    
        for (i = 0; i < lenght; i++)
            for (j = 0; j < lenght; j++)
            
                matrixC[i][j] = 0;
                for (int k = 0; k < lenght; k++)
                    matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
            
    
    else
    
        matrixC[1][1]=matrixMultiplication(matrixA[1][1], matrixB[1][1], lenght / 2) + matrixMultiplication(matrixA[1][2], matrixB[2][1], lenght / 2);
        matrixC[1][2]=matrixMultiplication(matrixA[1][1], matrixB[1][2], lenght / 2) + matrixMultiplication(matrixA[1][2], matrixB[2][2], lenght / 2);
        matrixC[2][1]=matrixMultiplication(matrixA[2][1], matrixB[1][1], lenght / 2) + matrixMultiplication(matrixA[2][2], matrixB[2][1], lenght / 2);
        matrixC[2][2]=matrixMultiplication(matrixA[2][1], matrixB[1][2], lenght / 2) + matrixMultiplication(matrixA[2][2], matrixB[2][2], lenght / 2);
    

    for (i = 0; i < lenght; i++)
    
        for (j = 0; j < lenght; j++)
        
            cout << matrixC[i][j] << " ";
        
        cout << endl;
    


int main()

    int lenght;
    cout << "Introduceti dimensiunea matricelor: "; cin >> lenght;
    int matrixA[101][101], matrixB[101][101], matrixC[101][101];
    cout << "Introduceti matricea A: ";
    readMatrixA(lenght);
    cout << "Introduceti matricea B: ";
    readMatrixB(lenght);
    matrixMultiplication(matrixA, matrixB, lenght);
    return 0;

这是在 Visual Studio 中编写的 Strassen 矩阵乘法代码。该代码对方阵使用了分而治之的技术。

在“matrixMultiplication”函数中,这 4 行调用在哪里,我有这个错误““int”类型的参数与“int(*)[101]”类型的参数不兼容,我不知道该怎么做。

那些是有错误的行。

        matrixC[1][1]=matrixMultiplication(matrixA[1][1], matrixB[1][1], lenght / 2) + matrixMultiplication(matrixA[1][2], matrixB[2][1], lenght / 2);
        matrixC[1][2]=matrixMultiplication(matrixA[1][1], matrixB[1][2], lenght / 2) + matrixMultiplication(matrixA[1][2], matrixB[2][2], lenght / 2);
        matrixC[2][1]=matrixMultiplication(matrixA[2][1], matrixB[1][1], lenght / 2) + matrixMultiplication(matrixA[2][2], matrixB[2][1], lenght / 2);
        matrixC[2][2]=matrixMultiplication(matrixA[2][1], matrixB[1][2], lenght / 2) + matrixMultiplication(matrixA[2][2], matrixB[2][2], lenght / 2);

【问题讨论】:

matrixB[1][1]int,函数正在等待一个矩阵 这些不是您唯一的错误。在同一行中,您尝试将 void 函数的返回值分配给 matrixC 的元素。 在您的各种读取功能中,您正在读取本地矩阵,然后将其丢弃。在您的主要功能中,您还有一些未初始化的本地矩阵(与其他矩阵同名)。仅仅因为您使用相同的名称并不意味着它们引用相同的对象。 “代码使用了方阵的分治法。” -- 有趣的是,我建议程序员使用分治法征服技术进行调试。隔离问题。检查有问题的行中的每个子表达式是否存在问题(例如,在更大的表达式中调用它之前,尝试在其自己的行上调用 matrixMultiplication(matrixA[1][1], matrixB[1][1], lenght / 2))。修剪不需要重现错误的代码(不要担心功能 - 在修复编译错误之前没有功能)。减少到 minimal reproducible example,bug 无法隐藏。 恐怕这个程序从来没有和施特拉森的乘法在同一个房间里。如果你足够用力地眯着眼睛,它类似于简单的矩阵乘法。 【参考方案1】:

在您的MatrixMultiplication() 函数中,您返回一个void,但您的程序正在等待它返回一个int。您需要更改 MatrixMultiplication 以返回 int。

【讨论】:

以上是关于出现此错误时我该怎么办:“int”类型的参数与 C++ 中“int(*)[101]”类型的参数不兼容的主要内容,如果未能解决你的问题,请参考以下文章

C 语言:收到错误:警告:格式“%d”需要“int *”类型的参数,但参数 2 的类型为“int **”[-Wformat=]

当我的程序在地址 0 处出现异常 0xc0000005 崩溃时我该怎么办?

当 'electron-updater' 抛出错误 'ERR_UPDATER_ASSET_NOT_FOUND' 时我该怎么办

由于我正在使用 MAMP 的本地托管,但“此网站出现严重错误”,这是错误即将到来。我该怎么办?

检测碰撞错误说当我有 8 个参数时我有 9 个参数 [重复]

每次项目更新时我都必须更改数据库我该怎么办?