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

在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”(类型冲突)的错误。

解决步骤

  1. 修正头文件的函数声明,让它和源文件的定义严格对齐:
    修改后的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
    
  2. 顺便修复源文件的打印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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:48:01