Я работаю над общей c -реализацией стека в C, и, похоже, я получаю вышеупомянутую ошибку при попытке pu sh или pop. Вот мой код ниже:
Заголовочный файл:
#ifndef STACK_H_
#define STACK_H_
#include <stdbool.h>
typedef struct Stack Stack;
struct Stack {
void* element;
int top;
int capacity;
int size;
};
Stack* new_Stack(int max_size);
bool Stack_push(Stack* this, void* element);
void* Stack_pop(Stack* this);
int Stack_size(Stack* this);
bool Stack_isEmpty(Stack* this);
#endif
C Файл:
#include <stddef.h>
#include "Stack.h"
Stack *new_Stack(int max_size) {
Stack* stack = malloc(sizeof(Stack));
stack->capacity = max_size;
stack->top = -1;
stack->size = 0;
stack->element = calloc(sizeof(void*)*max_size);
return stack;
}
bool Stack_push(Stack* this, void* element) {
if (this->top >= this->capacity-1){
return false;
}
this->element[this->top++] = element;
return true;
}
void* Stack_pop(Stack* this) {
if(Stack_isEmpty(this)){
return NULL;
}
else {
return this->element[this->top--];
}
}
int Stack_size(Stack* this) {
return this->size;
}
bool Stack_isEmpty(Stack* this) {
if(this->top = -1){
return true;
}
else {
return false;
}
}
В pu sh () & pop () функции, строки «this-> element [this-> top ++] = element;» и «return this-> element [this-> top-]» вызывают ошибку « this должно быть изменяемым lvalue».