You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中isSymmetric函数打印问题及E0167参数不兼容报错求助

嘿,我来帮你搞定这两个C++问题!咱们逐个解决:

1. 修复参数类型不兼容的E0167错误

这个错误的根源很明确:你的isSymmetric和transpose函数都声明接收int mat[MAX][MAX](其中MAX=100),但你在main里定义的数组a是int a[99][99]。在C++中,二维数组作为函数参数时,第二维度必须严格匹配——函数期望的是第二维长度为100的数组,但你传的是99的,编译器自然会报类型不兼容。

给你两个靠谱的解决方案:

方案一:统一数组维度(最简单)

直接把main里的数组大小改成MAX,和函数参数保持一致:

// 把原来的const int col = 99, row = 99;改成:
const int col = MAX, row = MAX;

这样数组a就是100x100的,完美匹配函数的参数要求,错误直接消失。

方案二:用模板函数实现灵活适配(更优雅)

如果想让函数支持任意大小的方阵,不用依赖固定的MAX常量,可以把transpose和isSymmetric改成模板函数:

template<int SIZE>
void transpose(int mat[SIZE][SIZE], int tr[SIZE][SIZE], int N) {
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            tr[i][j] = mat[j][i];
}

template<int SIZE>
bool isSymmetric(int mat[SIZE][SIZE], int N) {
    int tr[SIZE][SIZE];
    transpose<SIZE>(mat, tr, N);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (mat[i][j] != tr[i][j])
                return false;
    return true;
}

调用的时候编译器会自动推导数组的大小,不用手动传模板参数。不过要注意加个输入校验,防止用户输入的matrix_size超过数组实际大小:

cout << "Enter rows and columns for quadratic matrix: ";
cin >> matrix_size;
if (matrix_size > row || matrix_size > col) {
    cout << "Error: Matrix size can't exceed " << row << "!" << endl;
    return 1;
}

另外,C++标准里不推荐用void main(),改成int main(),最后加return 0;更规范。

2. 优化isSymmetric结果的打印

你的代码其实已经有打印逻辑了,但可以让输出更清晰,避免用户看不懂结果对应的问题。把最后的判断代码改成这样:

cout << "\nIs the matrix symmetric? ";
if (isSymmetric(a, matrix_size))
    cout << "Yes" << endl;
else
    cout << "No" << endl;

这样输出会明确告诉用户结果对应的是“矩阵是否对称”的问题,比单纯输出Yes/No直观得多。

额外小提示

  • 你用了srand((unsigned)time(NULL));,需要在开头包含<ctime>头文件,否则可能会有编译警告:#include <ctime>
  • 随机数生成代码0 + rand() % (20 - 0 + 1)可以简化成rand() % 21,效果完全一样,更简洁。

修改后的完整代码示例

#include <iostream>
#include <iomanip>
#include <ctime> // 新增,用于srand
using namespace std;
const int MAX = 100;

void transpose(int mat[MAX][MAX], int tr[][MAX], int N) {
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            tr[i][j] = mat[j][i];
}

bool isSymmetric(int mat[MAX][MAX], int N) {
    int tr[MAX][MAX];
    transpose(mat, tr, N);
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (mat[i][j] != tr[i][j])
                return false;
    return true;
}

int main() { // 改成int main()
    int matrix_size;
    cout << "Enter rows and columns for quadratic matrix: ";
    cin >> matrix_size;
    
    const int col = MAX, row = MAX; // 统一维度为MAX
    int a[col][row];
    
    srand((unsigned)time(NULL));
    for (int i = 0; i < matrix_size; i++)
        for (int j = 0; j < matrix_size; j++)
            a[i][j] = rand() % 21; // 简化随机数生成
    
    cout << "\nGenerated matrix:\n";
    for (int i = 0; i < matrix_size; i++) {
        for (int j = 0; j < matrix_size; j++)
            cout << setw(4) << a[i][j];
        cout << endl;
    }
    
    cout << "\nIs the matrix symmetric? ";
    if (isSymmetric(a, matrix_size))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    
    return 0; // 新增返回值
}

内容的提问来源于stack exchange,提问作者Roman Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:27:57