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
相关产品推荐
相关产品推荐

