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

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

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

Как исправить ошибку с перегруженным оператором - C++

06.06.2012, 19:52. Просмотров 667. Ответов 2
Метки нет (Все метки)

Добрый вечер!
суть задания: Необходимо реализовать класс, который умеет хранить данные произвольных типов (int, char, любой другой объект класса - TComplex и CooperBy).

error C2593: неоднозначный 'operator <<'
выдает в главной ф-ции там, где написано cout
объясните пожалуйста в чем ошибка? как нужно?как избежать этого?

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
template <class T>                          //структура элемента стека
struct elem 
{
    T info;                                 // ячейка, содержащая информацию
    elem *next;                             // ячейка, содержащая адрес на следующий элемент
};
 
template <class ST>                         // стек
class STACK
{
private:
    elem <ST> *H;                           // указатель на начало стека
public:
    STACK() {H=NULL;}                       // констуктор
    ~STACK();                               // деструктор 
 
    void Push(ST);                          // помещение эл-та 
    ST Pop(void);                           // извлечение эл-та 
    void OutPut();                          // распечатка содержимого стека
    void Clear();                           // разрушение стека 
    void Menu(ST v);                        // меню
 
    friend ostream& operator<<(ostream &, ST &); // дружественная функция вывода
    friend istream& operator>>(istream &, ST &); // дружественная функция ввода
};
 
...
 
template <class ST>
ostream& operator<<(ostream &out, ST &s)
{
    out << s ;
    return out;
}   
 
template <class ST>
istream& operator>>(istream &in, ST &s)
{
    in >> s ;
    return in;
}
 
template <class ST>
void STACK <ST>::Menu(ST v)
{
    char key;
    do
    {
        cout<< " Выберите действие со стеком: \n";
        cout<< " 1. Помещение элемента в стек\n";
        cout<< " 2. Извлечение элемента из стека\n";
        cout<< " 3. Распечатка содержимого стека\n";
        cout<< " 4. Очищение стека\n";
        cout<< " 5. Выход\n";       
        key = getch();
        switch (key)
        {
        case '1':
            K++;
            cout<< "\n Введите новый элемент: ";
            in>> v;         
            Push(v);    
            system("cls");
            break;
        case '2':
            if (Pop())
            {
                cout<< "\n Значение: " << v << endl << " Элемент удален. Нажмите любую кнопку.";
                K--;
            }
            else
                cout<< "\n Стек пуст.\n";
            getch();
            system("cls");
            break;
        case '3':
            OutPut();
            getch();
            system("cls");
            break;
        case '4':
            Clear();
            K=0;
            system("cls");
            break;
        }
    }while (key!='5');
}
 
void main()
{
    setlocale(LC_ALL,"Russian");    
    char key;
    cout<< " Выберите тип данных: \n";
    cout<< " 1. целочисленный\n";
    cout<< " 2. символьный\n";
    cout<< " 3. комплексные числа\n";
    cout<< " 4. класс CooperBy\n";
    key = getch();
 
    system("cls");
    STACK <int> intStack; 
    STACK <char> charStack; 
    STACK <Complex> compStack;
    STACK <CooperBy> cStack; 
 
    switch (key)
    {
    case '1': 
        cout<< " *** Стек - целочисленный ***\n";
        int v; 
        intStack.Menu(v);
        break;
    case '2': 
        cout<< " *** Стек - символьный ***\n";
        char c;
        charStack.Menu(c);
        break;
    case '3': 
        cout<< " *** Стек - комплексные числа ***\n";
        TComplex xy();
        compStack.Menu(xy);
        break;
    case '4': 
        cout<< " *** Стек - другой класс ***\n";
        CooperBy b("iii", 5, 500);
        cStack.Menu(b);
        break;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2012, 19:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как исправить ошибку с перегруженным оператором (C++):

Как работает ссылка с объектами, классами и перегруженным оператором [] - C++
Я тут решил поиграться с кодом и понял что совершенно не догоняю как работает ссылка &amp; Есть код нормально работающий: #include...

Указатель на объект с перегруженным оператором вывода(с наследованием) - C++
Есть два класса: строка(базовый) и комплексное число(производный). В базовом классе есть поле stri (указатель на char). В производном...

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса? - C++
В заголовочном файле &quot;klass.h&quot; есть класс: class klass { int x; public: klass(); ~klass(); void show(); friend void...

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...

Исправить простой код с оператором cout - C++
Добрый день! Помогите пожалуйста исправить ошибки в этом коде. Изучаю С++ совсем недавно и ещё не все ошибки могу разобрать, т.к....

Как исправить ошибку - C++
Process exited with return value 3221225725 выскакивает после запуска программы, использую интовый массив. как снять это ограничение?

2
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
06.06.2012, 21:22 #2
неверные функции ввода вывода. конфликтуют с глобальным оператором вывода. + реализация рекурсивная. тоже ничего хорошего.
вот специализировать нужно как-то так:
C++
1
2
3
4
5
6
7
8
template <class ST>
ostream& operator<<(ostream &out, const STACK<ST>& s)
{
  out << s ; // вот это рекурсивный вызов этого же самого оператора.
                // чтобы был нормальный вывод, тут нужно пройтись по всем элементам стека
                // и распечатать каждый.
  return out;
}
У оператора >> те же самые проблемы.
0
klukvennya
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 6
06.06.2012, 22:38  [ТС] #3
это я понимаю)
теперь проблемы такого рода...:
ссылается на case '1'
C++
1
2
3
4
5
6
7
case '1':
            K++;
            cout<< "\n Введите новый элемент: ";
            in >> v;            
            Push(v);    
            system("cls");
            break;
error C2065: in: необъявленный идентификатор

ссылается на case '2'
C++
1
2
3
4
5
6
7
8
9
10
11
case '2':
            if (Pop())
            {
                cout << "\n Значение: "; out << v; cout << "\n Элемент удален. Нажмите любую кнопку.";
                K--;
            }
            else
                cout<< "\n Стек пуст.\n";
            getch();
            system("cls");
            break;
error C2065: out: необъявленный идентификатор
error C2451: недопустимое условное выражение типа 'CooperBy'
error C2451: недопустимое условное выражение типа 'TComplex'

Добавлено через 41 минуту
помогите пожалуйста!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2012, 22:38
Привет! Вот еще темы с ответами:

Как исправить ошибку? - C++
Предупреждение 5 warning C4700: использована неинициализированная локальная переменная &quot;a&quot; 93строчка #include &lt;conio.h&gt; ...

Как исправить ошибку? - C++
int f(int, int, int); void koorx(int, int, int, int); int nod(int, int); void koorx(int &amp;x, int &amp;y, int vx, int vy, int t = 1) { ...

Как исправить ошибку? - C++
#include &lt;stdio.h&gt; #include &lt;tchar.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;string.h&gt; //Стуктура времени ...

Как исправить ошибку? - C++
#include &lt;fstream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip.h&gt; #include &lt;stdlib.h&gt; #include &lt;io.h&gt; ...


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

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

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