C-从int*到int的转换无效

C-从int*到int的转换无效,c,stack,queue,structure,C,Stack,Queue,Structure,我得到这个错误,我不知道为什么。我是一名学生,在研究这个问题时,我在尝试“圆形阵列”概念时遇到了这个具体问题。谢谢我试着将ElemArr e[MAX]改为int-elem[MAX]并在那里进行测试,但仍然不起作用 Line 20| Col 15 [Error] invalid conversion from 'ElemArr* {aka int*}' to 'ElemArr {aka int}' [-fpermissive] 在排队&q,e;,e的类型是int*,但您要将其作为int变量传递给

我得到这个错误,我不知道为什么。我是一名学生,在研究这个问题时,我在尝试“圆形阵列”概念时遇到了这个具体问题。谢谢我试着将ElemArr e[MAX]改为int-elem[MAX]并在那里进行测试,但仍然不起作用

Line 20| Col 15 [Error] invalid conversion from 'ElemArr* {aka int*}' to 'ElemArr {aka int}' [-fpermissive]
在排队&q,e;,e的类型是int*,但您要将其作为int变量传递给void EnqueueQueue*Q,ElemArr e;功能

您应该将int类型的变量传递给Enqueue函数的第二个参数。

Enqueue函数只接受一个ElemArr值,但您试图传递整个数组。您需要为每个元素分别调用它。改变

#include<stdio.h>
#include<stdlib.h>
#define MAX 5

typedef int ElemArr;

typedef struct{
    ElemArr E[MAX];
    int top;
    int back;
}Queue;

void initQueue(Queue *Q);
void Enqueue(Queue *Q, ElemArr E);

int main(){
    Queue q;
    ElemArr e[MAX] = {4, 21, 65, 12, 17};
    initQueue(&q);
    Enqueue(&q, e);
    return 0;
}

void initQueue(Queue *Q){
    Q->top = 1;
    Q->back = 0;
    printf("Queue is initialized");
}

void Enqueue(Queue *Q, ElemArr E){
    if((Q->back+2) % MAX != Q->top){
        Q->back = (Q->back+1) % MAX;
        Q->E[Q->back] = E;
        printf("Enqueue done");
    }
}

void Dequque(Queue *Q){
    if((Q->back+1) % MAX != Q->top){
        Q->top = (Q->top+1) % MAX;
    }
}


Enueue的第二个参数是一个ElemArr,但您试图传递e,这是一个ElemArr数组。您需要在循环中调用Enqueue,将数组的每个元素添加到队列中。@WhozCraig这不起作用,他想要一个5个元素的数组。是的,我看到了。不在别名中隐藏简单类型的更多燃料。ElemArr不是实际的数组,也不是指针。收回。@Saberton,如果/当您删除不必要的类型别名ElemArr并仅使用int时,您的代码是什么样子的?那么问题出在哪里呢?
Enqueue(&q, e);
for (int i = 0; i < MAX; i++) {
    Enqueue(&q, e[i]);
}