11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
1

Стек. Исправить ошибки или добавить функцию удаления элемента из стека

28.11.2017, 09:16. Показов 1786. Ответов 8
Метки нет (Все метки)

Здравствуйте, не могли бы Вы мне помочь исправить ошибки и добавить простенькую функцию.
Ошибки:
строка 29 - отсутствуют экземпляры перегруженная функция "list::list" соответствующие данному типу
строка 81 - отсутствуют экземпляры конструктора "list:list" , соответствующие списку аргументов (хотя у меня есть конструктор для одной переменной, строки 29-33)
строка 85,86,87 - требуется выражение (тут я действительно не знаю как записать).

И если возможно не могли бы Вы для данной программы написать функцию извлечения элемента из стека.

Заранее огромное спасибо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "stdafx.h"
#include <iostream>
using namespace std;
struct element
{
    char a;
    element *next;
};
 
class list
{
public:
    list();
    ~list();
    void add(char c);
    void operator+(char c);
    bool operator!=(list &A);
private:
    element *Head;
    int count;
};
 
list::list()
{
    Head = NULL;
    count = 0;
}
 
list::list(char b)
{
    Head = new element;
    Head->a = b;
    Head->next = NULL;
}
 
list::~list()
{
    cout << "Деструктор вызван" << endl;
}
 
void list::add(char c)
{
    if (Head == NULL)
    {
        Head = new element;
        Head->a = c;
        Head->next = NULL;
        count = 1;
    }
    else
    {
        element *A;
        A = new element;
        A->a = c;
        A->next = Head;
        Head = A;
        count++;
    }
}
 
void list :: operator+(char c)
{
    add(c);
}
 
bool list :: operator!=(list &A)
{
    if (A.count == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
 
 
int main()
{
    list ch1, ch2('a'), ch3;
    ch1 + 'b';
    ch2 + 'b';
 
    ch1 != ;
    ch2 != ;
    ch3 != ;
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2017, 09:16
Ответы с готовыми решениями:

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то...

Создать стек целочисленных значений. Реализовать операции добавления (push) и удаления (pop) элемента из стека
Создать стек целочисленных значений. Реализовать операции добавления (push) и удаления (pop)...

Используя очередь или стек, описать процедуру или функцию, определяющую число вхождений элемента Е в дерево Т
Народ помогите пожалуйста! Проблема в том, что не понимаю суть задания. Прошу не код, а объяснения...

Создать стек. Реализовать добавление, вывода и удаления из стека
Создать стек. Реализовать добавление, вычисление среднего арифметического парных значений элементов...

8
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
28.11.2017, 10:17 2
1. В самом классе описан только конструктор без параметров (стр. 13), конструктора list(char b) там нет.

2. Вместо операции + логичнее использовать +=, поскольку она меняет объект, для которого вызывается.

3. А вот вместо != точнее будет просто !
Использовать его можно так:
C++
1
if (!ch1) { cout << "Список пуст"; }
1
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
28.11.2017, 13:00 3
Лучший ответ Сообщение было отмечено triatri3 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
char list::pop() { 
    char     retVal;
    element *temp;
 
    if (!count) { 
        return 0;
    }
    
    temp   = Head;
    retVal = Head->a;
    Head   = Head->next;
    delete temp;
    return retVal;
}
 
list::~list()
{
     cout << "Деструктор вызван" << endl;
    while( count ) { pop(); } // Освобождаем выделенную память
}
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
01.12.2017, 21:26  [ТС] 4
Цитата Сообщение от likehood Посмотреть сообщение
3. А вот вместо != точнее будет просто !
Использовать его можно так:
C++Выделить код
1
if (!ch1) { cout << "Список пуст"; }
Простите но компилятор Microsoft Visual studio ,по крайней мере, ругается. Говорит слишком много параметров для этой функции оператора (в строке 17 самого верхнего кода).
0
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
01.12.2017, 21:34 5
Цитата Сообщение от triatri3 Посмотреть сообщение
слишком много параметров для этой функции оператора
Это если заменить operator != на operator !? Ну так ! это унарный оператор, ему не нужны параметры.
C++
1
2
3
4
bool list::operator!()
{
    return count == 0;
}
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
06.12.2017, 18:09  [ТС] 6
Не поможете исправить ошибки? строка 70 (а именно указывает на A.) выражение должно иметь тип класса
строка 87 идентификатор bool1 не определён (ХОТЯ ОН ОПРЕДЕЛЁН, строки 67-77)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "stdafx.h"
#include <iostream>
using namespace std;
struct element
{
    char a;
    element *next;
};
 
class list
{
public:
    list();
    list(char b);
    ~list();
    void add(char c);
    void operator+(char c);
    bool bool1();
private:
    element *Head;
    int count;
};
 
list::list()
{
    Head = NULL;
    count = 0;
}
 
list::list(char b)
{
    Head = new element;
    Head->a = b;
    Head->next = NULL;
}
 
list::~list()
{
    cout << "Деструктор вызван" << endl;
}
 
void list::add(char c)
{
    if (Head == NULL)
    {
        Head = new element;
        Head->a = c;
        Head->next = NULL;
        count = 1;
    }
    else
    {
        element *A;
        A = new element;
        A->a = c;
        A->next = Head;
        Head = A;
        count++;
    }
}
 
void list :: operator+(char c)
{
    add(c);
}
 
bool list :: bool1()
{
    element *A;
    if (A.count == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
};
 
 
int main()
{
    list ch1, ch2('a'), ch3;
    ch1 + 'b';
    ch2 + 'b';
 
    bool1.ch1;
    bool1.ch2;
    bool1.ch3;
    return 0;
}
0
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
06.12.2017, 18:25 7
Лучший ответ Сообщение было отмечено triatri3 как решение

Решение

Цитата Сообщение от triatri3 Посмотреть сообщение
A.count
С точки зрения языка A это указатель, и обращаться к полю count нужно через стрелочку, а не точку. Только боюсь, это вам не поможет, поскольку A это вообще непонятно что - просто случайный указатель.

Скорее всего вы хотели обратиться к полю count самого объекта, для которого была вызвана функция. А для этого достаточно просто написать count, либо же this->count.

Цитата Сообщение от triatri3 Посмотреть сообщение
идентификатор bool1 не определён
У вас перепутаны местами объект и его функция-член. То есть, вызывать надо так:
C++
1
ch1.bool1();
Осталось придумать, что делать с возвращаемым значением.
1
11 / 12 / 8
Регистрация: 16.11.2016
Сообщений: 892
08.12.2017, 08:40  [ТС] 8
Спасибо, но теперь выдаёт ошибки
Нестандартный синтаксис, используйте "&" чтобы создать указатель на член
В строках 87, 88, 89. Подскажите как исправить
C++
1
2
3
ch1.bool1;
ch2.bool1;
ch3.bool1;
0
1269 / 1026 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
08.12.2017, 08:52 9
Для вызова функции нужны скобки. См. предыдущее сообщение.

Добавлено через 1 минуту
Даже если у функции нет параметров, скобки всё равно нужны.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2017, 08:52
Помогаю со студенческими работами здесь

Исправить программу удаления из стека
Помогите исправить функцию удаления, она не работает , не знаю как ее сделать class Program ...

Стек: добавление и изъятие элемента, проверка стека
Здравствуйте,через неделю у меня экзамен и нам выдали вопросы которые будут на экзамене и один...

Нужно вместо добавления/удаления добавить стек и очередь
Имеется список, нужно вместо добавления/удаления добавить стек и очередь #include &quot;stdlib.h&quot;...

Некорректно работает процедура удаления последнего элемента из стека.
Доброго времени суток. Пишу программку для работы со стеком. Вроде как все нормально, но вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru