почему не происходит инициализация из-за метки 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;