0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
1

Ошибка в методе класса

20.04.2020, 13:43. Показов 161. Ответов 2
Метки c++ (Все метки)

Сделал перегрузку << для класса Product и FarmProduct. Но когда в функции Choice хочу использовать вывод появляется ошибка в методе output в класу Shop. Что не так?

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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream filein("file.txt");
ofstream fileout("errors.txt");
 
 
class Product {
protected:
    string name, producer;
    float price;
    int day, month, year;
public:
    Product();
    Product(string n, string p, float pr, int d, int m, int y);
    Product(const Product& l);
    friend istream& operator>>(istream& in, Product& l);
    friend ostream& operator<<(ostream& out, Product& l);
};
 
Product::Product() :name(""), producer(""), price(0), day(0), month(0), year(0) {};
Product::Product(string n, string p, float pr, int d, int m, int y) {
    name = n;
    producer = p;
    price = pr;
    day = d;
    month = m;
    year = y;
}
Product::Product(const Product& l) {
    name = l.name;
    producer = l.producer;
    price = l.price;
    day = l.day;
    month = l.month;
    year = l.year;
}
istream& operator>>(istream& in, Product& l) {
    in >> l.name >> l.producer >> l.price >> l.day >> l.month >> l.year;
    if (l.price < 0) {
        fileout << "The price of " << l.name << " was less than zero. ";
        cout << "ERROR! Enter a new price of " << l.name << " : ";
        while (l.price < 0) {
            cin >> l.price;
        }
        fileout << "It was changed on - " << l.price << endl;
    }
    if (l.day < 0 || l.day > 31) {
        fileout << "The day of " << l.name << " was less than zero or bigger than thirty one. ";
        cout << "ERROR! Enter a new day of " << l.name << " : ";
        while (l.day < 0 || l.day > 31) {
            cin >> l.day;
        }
        fileout << "It was changed on - " << l.day << endl;
    }
    if (l.month < 0 || l.month > 12) {
        fileout << "The month of " << l.name << " was less than zero or bigger than twelve. ";
        cout << "ERROR! Enter a new month of " << l.name << " : ";
        while (l.month < 0 || l.month > 12) {
            cin >> l.month;
        }
        fileout << "It was changed on - " << l.month << endl;
    }
    if (l.year < 0 || l.year > 2020) {
        fileout << "The year of " << l.name << " was less than zero or bigger than two thousand and twenty. ";
        cout << "ERROR! Enter a new year of " << l.name << " : ";
        while (l.year < 0 || l.year > 2020) {
            cin >> l.year;
        }
        fileout << "It was changed on - " << l.year << endl;
    }
    return in;
}
ostream& operator<<(ostream& out, Product& l) {
    cout << "Name - " << l.name << endl
        << "Producer - " << l.producer << endl
        << "Price - " << l.price << "$" << endl
        << "Date - " << l.day << "." << l.month << "." << l.year << endl << endl;
    return out;
}
 
class FarmProduct : public Product {
protected:
    string category;
public:
    FarmProduct();
    FarmProduct(string n, string p, float pr, int d, int m, int y, string c);
    FarmProduct(const FarmProduct& l);
    friend istream& operator>>(istream& in, FarmProduct& l);
    friend ostream& operator<<(ostream& out, FarmProduct& l);
 
};
 
FarmProduct::FarmProduct() :category(""), Product() {}
FarmProduct::FarmProduct(string n, string p, float pr, int d, int m, int y, string c) : Product(n, p, pr, d, m, y) {
    category = c;
}
FarmProduct::FarmProduct(const FarmProduct& l) : Product(l) {
    category = l.category;
}
istream& operator>>(istream& in, FarmProduct& l){
    in >> l.name >> l.producer >> l.price >> l.day >> l.month >> l.year >> l.category;
    if (l.price < 0) {
        fileout << "The price of " << l.name << " was less than zero. ";
        cout << "ERROR! Enter a new price of " << l.name << " : ";
        while (l.price < 0) {
            cin >> l.price;
        }
        fileout << "It was changed on - " << l.price << endl;
    }
    if (l.day < 0 || l.day > 31) {
        fileout << "The day of " << l.name << " was less than zero or bigger than thirty one. ";
        cout << "ERROR! Enter a new day of " << l.name << " : ";
        while (l.day < 0 || l.day > 31) {
            cin >> l.day;
        }
        fileout << "It was changed on - " << l.day << endl;
    }
    if (l.month < 0 || l.month > 12) {
        fileout << "The month of " << l.name << " was less than zero or bigger than twelve. ";
        cout << "ERROR! Enter a new month of " << l.name << " : ";
        while (l.month < 0 || l.month > 12) {
            cin >> l.month;
        }
        fileout << "It was changed on - " << l.month << endl;
    }
    if (l.year < 0 || l.year > 2020) {
        fileout << "The year of " << l.name << " was less than zero or bigger than two thousand and twenty. ";
        cout << "ERROR! Enter a new year of " << l.name << " : ";
        while (l.year < 0 || l.year > 2020) {
            cin >> l.year;
        }
        fileout << "It was changed on - " << l.year << endl;
    }
    return in;
}
ostream& operator<<(ostream& out, FarmProduct& l) {
    cout << "Name - " << l.name << endl
        << "Producer - " << l.producer << endl
        << "Price - " << l.price << "$" << endl
        << "Date - " << l.day << "." << l.month << "." << l.year << endl
        << "Category - " << l.category << endl << endl;
    return out;
}
 
class Shop : public FarmProduct {
private:
    string Name;
    int size;
    Product** mas;
public:
    Shop();
    Shop(string n, int s);
    Shop(const Shop& l);
    void input();
    void output();
};
 
Shop::Shop() : Name(""), size(0), FarmProduct() {}
Shop::Shop(string n, int s) : FarmProduct() {
    Name = n;
    size = s;
}
Shop::Shop(const Shop& l) : FarmProduct() {
    Name = l.Name;
}
void Shop::input() {
    string symbol;
    mas = new Product * [size];
    for (int i = 0; i < size; i++) {
        filein >> symbol;
        if (symbol == "@") {
            Product* pic = new Product;
            filein >> *pic;
            mas[i] = pic;
        }
        else if (symbol == "#") {
            FarmProduct* farm = new FarmProduct;
            filein >> *farm;
            mas[i] = farm;
        }
    }
}
void Shop::output() {
    for (int i = 0; i < size; i++) {
        cout << mas[i];      // ошибка
    }
}
 
int Menu();
 
void Choice(string _name, int x, int n);
 
int main(){
    string _name;
    int n;
    filein >> n;
    cout << "Enter the name of your shop - ";
    getline(cin, _name);
    Choice(_name, Menu(), n);
}
 
int Menu() {
    cout << "1) Input info.\n"
        << "2) Find produce.\n"
        << "3) Find the cheapest product with some name.\n"
        << "4) Number of products with the same name.\n"
        << "5) Add or remove product.\n"
        << "6) Output info.\n\n"
        << "Your choice - ";
    int x;
    cin >> x;
    return x;
}
 
void Choice(string _name, int x, int n) {
    Shop obj(_name, n);
    switch (x)
    {
    case 1: {
        obj.input();
        Choice(_name, Menu(), n);
        break;
    }
    case 6: {
        obj.output();
        Choice(_name, Menu(), n);
    }
    default:
        break;
    }
}
Содержимое файла file.txt

5
@ Pen China 4 1 45 2019
# Copybook Ukraine -12 3 10 2015 school
# HeapPhones Italy 25 20 4 2020 technology
# Mouse USA 17 32 3 2014 technology
@ Radio Brazil 44 19 7 2002
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2020, 13:43
Ответы с готовыми решениями:

Ошибка при вызове метода класса в методе другого класса
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса...

Ошибка error C2440 с char в методе класса
Код: #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;iostream&quot;

Приём константных векторов класса, как аргументов в методе другого класса
Есть такой класс: class Order { private: int numberOrder; map &lt;string, int&gt; catalogDish;...

Как в методе класса вызвать другой метод того же класса?
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A,...

2
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
20.04.2020, 13:53 2
C++
1
2
3
4
5
6
7
8
ostream& operator<<(ostream& out, Product& l) {
//    cout << "Name - " << l.name << endl  // темпо-темпо
    out << "Name - " << l.name << endl
        << "Producer - " << l.producer << endl
        << "Price - " << l.price << "$" << endl
        << "Date - " << l.day << "." << l.month << "." << l.year << endl << endl;
    return out;
}
У Вас оператор << выводит в стандартный поток "cout" и возвращает пустой поток "out". Для FarmProduct - то же самое
0
0 / 0 / 0
Регистрация: 07.10.2019
Сообщений: 78
20.04.2020, 14:03  [ТС] 3
У меня данные в файле и чтобы убедиться в правильном заполнении использовал cout.
Но это ошибки не исправило(
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2020, 14:03
Помогаю со студенческими работами здесь

Вызов метода класса в лямбде-функции, вызываемой в другом методе этого же класса
Здравствуйте. Помогите грамотно передать в лямбду метод класса. Упрощенно. Есть класс. В одном...

Указатель метода класса в другом методе этого класса
Здравствуйте. Как можно передать в методе класса указатель на другой метод этого же класса....

Задачка для новичков #2: вывести в методе класса-родителя значение данных-членов из дочернего класса
Вдохновленный соседней темой тоже решил задать свой вопрос таким же начинающим программистам как и...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса? насколько это...

Двоеточие в методе класса
Несколько раз в разных статьях сталкивался с таким синтаксисом и нигде не смог найти описание. ...

Использование this в методе класса
Добрый день! Пытаюсь написать класс красно-чёрного дерева. Вот фрагмент класса: class Tree { ...


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

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

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