почему не происходит инициализация из-за метки case

у меня происходит ошибка в case 4, которая отвечает за инициализацию функции int countElements(const DoublyLinkedList& list). Суть этой программы заключается в том, что надо создать двусвязный рукописный список с возможностью добавлять элементы в начало и конец списка, удалять элементы и вывод количества элементов. Помогите решить проблему, каким образом переделать case

#include <iostream>
#include <string>
using namespace std;

class Node {
public:
    string data;
    Node* prev;
    Node* next;

    Node(const string& value) : data(value), prev(nullptr), next(nullptr) {}
};

class DoublyLinkedList {
private:
    Node* head;
    Node* tail;

public:
    DoublyLinkedList() : head(nullptr), tail(nullptr) {};

    void push_front(const string& value) {
        Node* newNode = new Node(value);
        if (head == nullptr) {
            head = newNode;
            tail = newNode;
        }
        else {
            newNode->next = head;
            head->prev = newNode;
            head = newNode;
        }
        cout << "Добавлен элемент в начало списка: " << value << endl;
        printList();
    }

    void push_back(const string& value) {
        Node* newNode = new Node(value);
        if (head == nullptr) {
            head = newNode;
            tail = newNode;
        }
        else {
            tail->next = newNode;
            newNode->prev = tail;
            tail = newNode;
        }
        cout << "Добавлен элемент в конец списка: " << value << endl;
        printList();
    }
    void removeByIndex(int index) {
        if (index < 0) {
            cout << "Индекс должен быть неотрицательным." << endl;
            return;
        }

        if (head == nullptr) {
            cout << "Список пуст. Невозможно удалить элемент." << endl;
            return;
        }

        if (index == 0) {
            Node* temp = head;
            head = head->next;
            if (head != nullptr) {
                head->prev = nullptr;
            }
            else {
                tail = nullptr;
            }
            delete temp;
            cout << "Элемент с индексом 0 удален." << endl;
            printList();
            return;
        }

        Node* current = head;
        int currentIndex = 0;
        while (current != nullptr && currentIndex < index) {
            current = current->next;
            currentIndex++;
        }

        if (current == nullptr) {
            cout << "Индекс превышает размер списка." << endl;
            return;
        }

        current->prev->next = current->next;
        if (current->next != nullptr) {
            current->next->prev = current->prev;
        }
        else {
            tail = current->prev;
        }

        delete current;
        cout << "Элемент с индексом " << index << " удален." << endl;
        printList();
    }

    void printList() {
        cout << "Список:" << endl;
        Node* current = head;
        while (current != nullptr) {
            cout << current->data << " ";
            current = current->next;
        }
        cout << endl;
    }

    int countElements(const DoublyLinkedList& list) {
        int count = 0;
        Node* current = list.head;
        while (current != nullptr) {
            count++;
            current = current->next;
        }
        return count;
    }
    void add() {
        string value;
        char choice;
        do {
            cout << "Выберите действие:" << endl;
            cout << "1. Добавить элемент в начало списка" << endl;
            cout << "2. Добавить элемент в конец списка" << endl;
            cout << "3. Удаление элемента" << endl;
            cout << "4. Количество элементов" << endl;
            cout << "5. Завершить программу" << endl;
            cout << "Ваш выбор: ";
            cin >> choice;
            switch (choice) {
            case '1':
                cout << "Введите слово: ";
                cin >> value;
                push_front(value);
                break;
            case '2':
                cout << "Введите слово: ";
                cin >> value;
                push_back(value);
                break;
            case'3':
                int index;
                cout << "Введите индекс элемента, который хотите удалить: ";
                cin >> index;
                removeByIndex(index);
                break;
            case'4':
                int numElements = countElements(*this);
                cout << "Количество элементов в списке: " << numElements << endl;
                break;
            case '5':
                cout << "Завершение программы." << endl;
                break;
            default:
                cout << "Некорректный выбор. Попробуйте снова." << endl;
            }
        } while (choice != '5');
    }

    void runProgramm() {
        string input;
        cout << "Введите слова через enter, если вы хотите прекратить ввод, то используйте '~'" << endl;
        while (true) {
            getline(cin, input);
            if (input == "~") {
                break;
            }
            push_back(input);
        }
        add();
        
    }
};

int main() {
    setlocale(LC_ALL, "rus");
    char choice;
    do {
        DoublyLinkedList list;
        list.runProgramm();
        cout << "Хотите продолжить (y/n)? ";
        cin >> choice;
        cin.ignore();
    } while (choice == 'y' || choice == 'Y');
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Выбирайте...

Вариант 1:

string value;
int numElements = 0;
char choice;

....

    case'4':
        numElements = countElements(*this);
        cout << "Количество элементов в списке: " << numElements << endl;
        break;

Вариант 2:

    case'4':
        {
            int numElements = countElements(*this);
            cout << "Количество элементов в списке: " << numElements << endl;
        }
        break;
→ Ссылка