【问题标题】:Why ide shows "[Error] incompatible type for argument"?为什么 ide 显示“[Error] incompatible type for argument”?
【发布时间】:2016-06-08 22:56:09
【问题描述】:

我是 C 初学者,我不明白为什么我运行下面的代码时

#include <stdio.h>
#include <stdlib.h>
#define DIMMAX 5
#define MAXSTRINGA 20

typedef struct{
    
    int num;
    int den;
    
} Razionale;


typedef Razionale Matrice[DIMMAX][DIMMAX];

void aquisisciRazionale(Razionale);
void acquisisciMatrice(Matrice[DIMMAX][DIMMAX]);

void aquisisciRazionale(Razionale n){
    
    printf("Inserire numeratore: ");
    scanf("%d", &n.num);
    printf("Inserire denominatore: ");
    scanf("%d", &n.den);
    
}

void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){
    

    int i, j;
    
    for(i=0; i<DIMMAX; i++){
        
        for(j=0; j<DIMMAX; j++){
            
            aquisisciRazionale(mat[i][j]);
             
             
        }
    }
}

int main(int argc, char *argv[]) {
    
    Matrice m[DIMMAX][DIMMAX];
    acquisisciMatrice(m);

}

我有这个错误:

[错误] 'aquisisciRazionale' 的参数 1 的类型不兼容

[Note] 预期为“Razionale”,但参数类型为“struct Razionale (*)[5]”

我不明白定义结构或定义函数时是否有错误。有人可以帮我吗?

【问题讨论】:

  • 与问题无关,但您可以在for 内声明计数器变量,如下所示:for(int i = 0; i &lt; DIMMAX; i++)
  • 避免类型定义。它们的存在只是为了迷惑你。
  • 为了将来参考,请在 Google 上搜索错误消息,省略您的变量名称。我搜索了“参数的错误不兼容类型”,并在搜索顶部找到了三个相关的 SO 帖子。

标签: c


【解决方案1】:

Matrice typedef 已经是一个二维数组。当你声明你的函数时

void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){

您是说matMatrice 的二维数组,它是Razionale 的四维数组。然后mat[i][j]Matrice,而不是Razionale

函数应该只是

void acquisisciMatrice(Matrice mat){

因为尺寸是Matrice typedef 的一部分。您还应该更改main() 中的变量:

Matrice m;
acquisisciMatrice(m);

注意acquisisciRazionale() 不会填充acquisisciMatrice() 中的矩阵元素。当你打电话时

acquisisciRazionale(mat[i][j]);

您正在传递数组元素的副本。 scanf() 然后写入该副本,这对原始数组没有影响。你应该传递一个指针。

acquisisciRazionale(&mat[i][j]);

并将函数更改为:

void aquisisciRazionale(Razionale *n){

    printf("Inserire numeratore: ");
    scanf("%d", &(n->num));
    printf("Inserire denominatore: ");
    scanf("%d", &(n->den));

}

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2023-01-16
    • 2021-10-06
    • 2022-11-18
    • 1970-01-01
    相关资源
    最近更新 更多