Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Asgar
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 6
#1

В чем ошибка? - C++

20.06.2012, 14:29. Просмотров 864. Ответов 18
Метки нет (Все метки)

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include "stdio.h"
#include "iostream"
#include "locale.h"
#include <conio.h>
 
using namespace std;
 
class node
 {
 public:
 int val;
 node *next;
 node(int v, node *n){val = v; next = n;}
 };
 
class queue
{  private: 
    node *first, *last;
    int count;
   public: 
      queue(){first=0; last=0; count=0;}
      queue(queue&);
      ~queue();
      void push(int);
      int pop();
      void print_queue();
      void deletion(int);
      void deletion2(int);
};
 
queue::~queue()
{
    while(first!=0)
        { node * p=first->next;
          delete first;
          first=p;
        }
}
 
queue::queue(queue &mp)
{
 queue rev1; rev1.first=mp.first; rev1.last=mp.last; rev1.count=mp.count;
 queue rev;
 for (int i=0; i<mp.count; i++) 
 {
 rev.push(rev1.pop());
 }
}
 
void queue::push(int val)
{    node *tmp=new node(val, 0);
        if(count == 0) 
    {
        first = tmp;
        last = tmp;
        count++;
    }
    else
    {
        last->next = tmp;
        last = last->next;
        count++;
    }
}
 
int queue::pop()
{
    int val = first->val;
    node *tmp = first;
    first = first->next;
    delete tmp;
    count--;
    return val;
}
 
 
void queue::deletion(int key)
{
    int i, val, size = count;
    cout << "\nВыполнено удаление " << key << endl;
    for(i = 0; i < size; i++)
    {
        val = pop();
        if(val != key) {push(val);}
    }
}
 
void queue::deletion2(int numb)
{
    if(numb < 0 || numb > count) 
    {
        cout << "\nОперация невозможна\n";
        return;
    }
    int i, size = count;
    cout << "\nВыполнено удаление элемента с номером" << numb << endl;
    for(i = 0; i < size; i++)
    {
        if(i != numb-1) {push(pop());}
        else {pop();}
    }
}
 
void queue::print_queue()
{
    int i, val;
    if(count != 0)
    {
        cout << "\nСодержимое очереди:\n";
        for(i = 0; i < count; i++)
        {
            val = pop();
            cout << val << "  ";
            push(val);
        }
        cout << endl;
    }
    else cout << "\nОчередь пуста\n";
}
 
int main(int argc, char argv[])
{
    setlocale(LC_ALL, "rus");
    queue MyQueue;
 
    MyQueue.push(2);
    MyQueue.push(0);
    MyQueue.push(1);
    MyQueue.push(3);
    MyQueue.push(4);
    MyQueue.push(2);
 
    MyQueue.print_queue();
    queue MyQueue2(MyQueue);
    MyQueue2.print_queue();
    MyQueue.deletion2(2);
    MyQueue.print_queue();
    MyQueue2.print_queue();
    getch ();
    return 0;
}

после компиляции не выводит никаких ошибок

1>------ Построение начато: проект: долод, Конфигурация: Debug Win32 ------
1>Построение начато 20.06.2012 14:26:27.
1>ClCompile:
1> Пропуск... (изменения не обнаружены)
1> апапа.cpp
1>
1>Построение успешно завершено.
1>
1>Затраченное время: 00:00:00.87
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

но сразу после этого выскакивает белое окошко со следующей записью

"Expression: BLOCK_TIME_IS_VALID (pHead -> тBlockUse)"
В чем дело?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2012, 14:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем ошибка? (C++):

Реализовать через тип данных структура. При сборке и отладки возникает ошибка. В чем ошибка? - C++
С++ в таблице из 5 строк хранятся данные о товарах: наименование, цена, количество. Определить и вывести наименование товара, цена которого...

Ошибка 2 error LNK2019, не пойму в чем ошибка - C++
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ &quot;int __cdecl game(void)&quot; (?game@@YAHXZ) в функции....

в чем ошибка ? - C++
Написать программу, выполняющую циклический сдвиг всех элементов массиваа1, а2, ..., ап на одну позицию влево, т.е. будет получен новый...

В чем ошибка? - C++
Поменять местами первый максимальный элемент массива А(5) и последний минимальный элемент массива В(5). использовать ф-ций. #include...

В чем ошибка? - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; struct Time { int h; int m; };

в чем ошибка - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void vvod(int a) { printf(&quot;Ââåäèòå ìàòðèöó:\n&quot;); printf(&quot;Ââåäèòå ìàòðèöó:\n&quot;); for (int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
20.06.2012, 14:46 #2
У тебя совершенно неверный конструктор копирования.
0
Asgar
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 6
22.06.2012, 19:32  [ТС] #3
А как будет правильно? Не могли бы написать, пожалуйста
0
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
22.06.2012, 20:01 #4
C++
1
2
3
4
5
6
7
8
9
10
11
queue::queue(queue &mp)
{
    count = 0;
    node *curr = mp.first;
 
    while(curr != 0)
    {
        push(curr->val);
        curr = curr->next;
    }       
}
и вроде заработало
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
22.06.2012, 20:02 #5
C++
1
2
3
4
5
6
7
8
9
10
11
queue::queue(queue &mp) : count(mp.count)
{
  node **inc1 = &first, *inc2 = mp.first;
  while (inc2->next != NULL)
  {
     *inc1 = new node(inc2->val, NULL);
     *inc1 = &(*inc1)->next; 
  }
  *inc1 = new node(inc2->val, NULL);
  last = *inc1;
}
Если я не ошибаюсь, то у меня это выглядело бы как-то так... Если знать, как обращаться с указателями, то ничего сложного.
0
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
22.06.2012, 20:10 #6
указатель на указателе =)) черт ногу сломит
0
darkknight2008
22.06.2012, 20:19
  #7

Не по теме:


xD значит я стою выше черта))

0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2012, 02:36 #8
darkknight2008, у меня компилятор 8 строку не принимает.

Добавлено через 38 минут
И вообще, этот код не рабочий. В цикле while, указатель inc2 не изменяется, поэтому цикл будет бесконечным.
0
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
23.06.2012, 08:32 #9
Ты прав. Тогда будет так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
queue::queue(queue &mp) : count(mp.count)
{
  node **inc1 = &first, *inc2 = mp.first;
  while (inc2->next != NULL)
  {
     *inc1 = new node(inc2->val, NULL);
     inc1 = &(*inc1)->next; 
     inc2 = inc2->next;
  }
  *inc1 = new node(inc2->val, NULL);
  last = *inc1;
}
У меня никогда с хоу на глаз не получалось определить рабочий ли код или нет((

Добавлено через 24 минуты
ИМХО, и вообще проверка по шагам в компиляторе - лучший способ для поиска ошибок!
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2012, 23:18 #10
Так другое дело. Всё работает.

Добавлено через 7 часов 57 минут
Есть один недостаток у этих конструкторов копирования. Происходит сбой, если в программе копируется пустая очередь. В варианте darkknight2008, сбой происходит при копировании, а в варианте cppGhost - при работе деструктора в конце программы. Если в деструкторе вместо: while(first!=0) написаать: while (count != 0), то вариант cppGhost работает нормально.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
23.06.2012, 23:23 #11
перегружай оператор = и не парься)
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.06.2012, 00:38 #12
В его коде он не используется.
0
Invader_Zim
Twilight Parasite
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 908
24.06.2012, 01:10 #13
alsav22, а можно взять и перегрузить. И конструктор копирования пилить не надо)
0
Asgar
0 / 0 / 0
Регистрация: 14.06.2012
Сообщений: 6
24.06.2012, 01:10  [ТС] #14
а как в конце показать работу конструкторов? у меня преподаватель спросил, я попробовал сделать, и не получилось
0
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.06.2012, 01:26 #15
кривой вопрос какой-то.
можно в коде найти вызов конструктора и сказать что вот он тут вызывается.
или же в тело конструктора вставить код, который будет на экран печатать сообщение о том, что вот мол я конструктор, меня вызвали.
Короче, что значит "показать работу конструкторов", и в каком "конце"?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2012, 01:26
Привет! Вот еще темы с ответами:

В чем ошибка? - C++
Компилятор ругается на: &gt;c:\users\home2\documents\visual studio 2008\projects\самостоятильные\самост 3\№3.cpp(20) : error C2017:...

в чем ошибка? - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; float f(int i) { return sqrt double;(i + i); } int main() {

В чем ошибка???? - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; void main (void) { int i; int buffer; int result=0; for(i=0;...

В чем ошибка? - C++
Подчеркивает строку cin.get(c); &quot;Отсутствуют экземпляры, перегруженная функция&quot; и &quot;слишком мало аргументов в вызове функции&quot;.. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.06.2012, 01:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru