Некоторые проблемы в struct _stack * и Digit :: struct_stack * - PullRequest
2 голосов
/ 21 марта 2019
void Digit::push(int value){

    struct _stack *next_field = new struct _stack;
    if (end == nullptr && start == nullptr){
        next_field->_next_ptr = nullptr; //in codebloks project. next_ptr = himself
        start = next_field;
    }
    else
        next_field->_next_ptr = end;
    next_field->_data = value;
    end = next_field;
}

Появляющаяся ошибка:

присвоение 'struct _stack *' (иначе '_stack *') из несовместимого типа 'struct _stack *' (также известный как Digit ::_stack * ')

Как это исправить?

Это класс цифры заголовка:

class Digit
{
    struct _stack *start = nullptr;
    struct _stack *end = nullptr;
    struct _stack *ptr_element = nullptr;

    struct _stack {
        _stack* _next_ptr = nullptr;
        int _data = 0;
    }_element;

public:
    Digit();
    void push(int);
    void pop();
};

1 Ответ

1 голос
/ 21 марта 2019

Компилятор рассматривает struct _stack и struct _stack в class Digit как две разные сущности.

Чтобы решить эту проблему, переместите определение struct _stack в class Digit перед объявлением указателей. Класс должен выглядеть так:

class Digit
{
    struct _stack {
        _stack* _next_ptr = nullptr;
        int _data = 0;
    }_element;

    struct _stack *start = nullptr;
    struct _stack *end = nullptr;
    struct _stack *ptr_element = nullptr;   

public:
    Digit();
    void push(int);
    void pop();
};

См. Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...