c - 错误 : *(int **, int,int,int )' differs in levels of indirection from ' int ()',我该如何修复它?

标签 c arrays linked-list

我正在尝试解决给我的作业问题之一。我应该创建一个链接列表和一个数组。链表的元素是一个由三个整数和一个指向下一个节点的指针组成的结构。数组的元素也是三个整数的结构。将这些特定结构体放入链表和数组的条件是给定矩阵满足:i+j 等于特定迭代中矩阵中的元素(其中 i 和 j 是迭代元素)。

Severity  Code    Description Project File    Line    Suppression State Error 
C2040 'createThreeArr': 'threesome *(int **,int,int,int)' differs in levels of indirection from 'int ()' 

我在这篇文章的标题中发现了这个错误,任何人都可以帮助我理解为什么会发生这种情况吗?我做错了什么?

#include <stdio.h>
#include <stdlib.h>

typedef struct threesome
{
    int sum;
    int i;
    int j;
}threesome;

typedef struct list
{
    threesome data;
    struct list* next;
}list;


int createArrayAndList(int** arr, int rows, int cols, threesome** resArr, list** resList)
{
    int num;
    *resList = createThreeList(arr, rows, cols, &num);
    *resArr = createThreeArr(arr, rows, cols, num);
    return num;
}
threesome* createThreeArr(int** arr, int rows, int cols, int num) {
    threesome* new_array;
    int i, j, k;
    if (!num) return NULL;
    new_array = (threesome*)malloc(sizeof(threesome)*num);
    k = 0;
    for (i = 0; i < rows; i++)
        for (j = 0; j < cols; j++)
            if (arr[i][j] == i + j) {
                new_array[k].sum = arr[i][j];
                new_array[k].i = i;
                new_array[k].j = j;
                k++;
            }
    return new_array;
}
list* createThreeList(int** arr, int rows, int cols, int* length_list) {
    int i, j, count = 0;
    list *head = NULL, *temp1 = NULL, *temp2 = NULL;
    for (i = 0; i < rows; i++)
        for (j = 0; j < cols; j++) {
            if (arr[i][j] == (i + j)) {
                temp2 = (list*)malloc(sizeof(list));
                temp2->data = createThree(i + j, i, j);
                temp2->next = NULL;
                if (!count) {
                    head = temp2;
                    temp1 = head;
                    count++;
                    continue;
                }
                else {
                    temp1->next = temp2;
                    temp1 = temp1->next;
                    count++;
                    continue;
                }
            }
        }
    *length_list = count;
    return head;
}
threesome createThree(int num, int i, int j) {
    threesome strc;
    strc.sum = num;
    strc.i = i;
    strc.j = j;
    return strc;
}

最佳答案

你有:

int createArrayAndList(int** arr, int rows, int cols, threesome** resArr, list** resList)
{
    int num;
    *resList = createThreeList(arr, rows, cols, &num);
    *resArr = createThreeArr(arr, rows, cols, num);
    return num;
}
threesome* createThreeArr(int** arr, int rows, int cols, int num) {
    …

createArrayAndList()中对createThreeArr()的调用隐式声明了createThreeArr()(以及对createThreeList()的调用) 的作用大致相同):

extern int createThreeList();
extern int createThreeArr();

这些函数返回一个带有未定义(但不是可变参数)参数列表的int

当编译器遇到 thirdsome* createThreeArr(int** arr, int rows, int cols, int num) { 时,它认为这不是你之前所说的!并生成错误消息。

在调用函数之前声明或定义函数。 C99需要它。如果你这样做,你会得到更好的错误检查。您可以在使用静态函数之前定义它,而无需预先声明它。

static threesome *createThreeArr(int **arr, int rows, int cols, int num);
static list *createThreeList(int **arr, int rows, int cols, int *length_list);
static threesome createThree(int num, int i, int j);
static int createArrayAndList(int** arr, int rows, int cols, threesome** resArr, list** resList);

static int createArrayAndList(int **arr, int rows, int cols, threesome **resArr, list **resList)
{
    …
}

…

如果是我的代码,除了 main() 之外的所有函数都将是 static (如上所述);如果它们在此源文件之外可见,则它们将在 header 中声明,并且 header 将包含在此处以及使用函数的其他位置。

关于c - 错误 : *(int **, int,int,int )' differs in levels of indirection from ' int ()',我该如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761272/

相关文章:

c - 音频输出有问题,没有欠载

c - #define 宏不打印变量

arrays - 查找最常连续重复的数字

c - C中的链接列表,无成员错误

java - Java 中的最大大小列表

java - 在最后一个节点之前添加第一个节点

c - 在 C 中看起来像三角形的输出

c - 为什么我得到 "ERROR : request for member stringLength and name in something not a structure or union"?

javascript - Jquery Javascript 对象 - 将某些值与另一个类似对象进行比较并替换

java - 出现 ArrayIndexOutOfBoundsException : 97 的运行时错误