在Vivado 2023中进行C仿真时出现‘conflicting types for 'matrix'’错误的解决咨询
在Vivado 2023中进行C仿真时出现‘conflicting types for 'matrix'’错误的解决咨询
嘿,这个错误的根源其实特别直观,咱们对着你给出的代码一步步捋明白:
先看你提供的头文件matrix.h内容:
#ifndef _MATRIX_H_ #define _MATRIX_H_ #include <stdio.h> void matrix(char a,char b,char res); #endif
再看源文件matrix.c里的函数定义:
#include "matrix.h" void matrix( char a[3][3], char b[3][3], char res[3][3] ) { int i=0,j=0,k=0; for(i=0;i<3;i++){ for(j=0;j<3;j++){ res[i][j]=0; for(k=0;k<3;k++){ res[i][j]+=a[i][k]*b[k][j]; } } } printf("%d \n",res);
问题核心
头文件里声明的matrix函数,参数是三个单个的char类型变量;但源文件里你实际写的函数定义,参数却是三个3x3的char二维数组——这就导致编译器看到的函数“声明”和“实际实现”的类型完全不匹配,直接抛出了“conflicting types”(类型冲突)的错误。
解决步骤
修正头文件的函数声明,让它和源文件的定义严格对齐:
修改后的matrix.h应该是这样:#ifndef _MATRIX_H_ #define _MATRIX_H_ #include <stdio.h> // 把参数改成二维数组类型,和实现保持一致 void matrix(char a[3][3], char b[3][3], char res[3][3]); #endif顺便修复源文件的打印bug:
你最后一行printf("%d \n",res);是无效的——res是二维数组名,直接传参只会输出数组的首地址,而且用%d打印地址也不符合规范。如果要输出矩阵乘法的结果,得遍历每个元素打印,比如替换成这段代码:// 替换原来的printf行 for(i=0;i<3;i++){ for(j=0;j<3;j++){ printf("%d ", res[i][j]); } printf("\n"); }
改完这两处之后,重新编译仿真,这个类型冲突的错误应该就彻底解决了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

