Не получается организовать вывод данных
У меня есть класс лампочек lamp. Мне нужно вывести с помощью метода TEST() всю информацию, про лампы накаливания (они обозначены как n). Для этого я создал метод gettype(), который должен получать информацию о типе лампочки, и метод тест, который должен выводить информацию о лампочке. Я пытаюсь посмотреть все экземпляры класса и, как уже написал выше, вывести информацию про те, которые лампы накаливания. Получаю кучу синтаксических ошибок, с которыми ничего не могу сделать. Буду благодарен за помощь!
Ошибки:
Строки:
7 и 8 --->>> if (lamp[i].gettype == "n") {
8, 9, 10, 11 --->>> lamp[i].TEST();
Код:
#include <iostream>
using namespace std;
class lamp
{
public:
//методы
void TEST(void);
char* gettype (void);
void INIT(void);
void SHOW(void);
//конструкторы
lamp();
lamp(char *t, int powe, char *c, double cos);
lamp(const lamp & obj);
//деструктор
~lamp();
private:
//данные
char type[100]; // светодиодная, энергосберегающая или лампа накаливания
int power; // ЛАМПА НАКАЛИВАНИЯ - "n"
char color[100];
double cost;
};
lamp::lamp() {
cout << "Этот обьект был создан в конструкторе по умолчанию.\n";
strcpy(type, "");
power = 0;
strcpy(color, "");
cost = 0;
}
lamp::lamp(char *t, int powe, char *c, double cos) {
cout << "Этот обьект был создан в конструкторе с параметрами.\n";
strcpy(type, t); //*t
power = powe;
strcpy(color, c); //*c
cost = cos;
}
lamp::lamp(const lamp & obj) {
cout << "Этот обьект был создан в конструкторе копирования.\n";
strcpy(type, obj.type);
power = obj.power;
strcpy(color, obj.color);
cost = obj.cost;
}
lamp::~lamp() {
cout << "Удаление объекта деструктором.\n";
}
void lamp::SHOW(void) {
cout << "Информация о лампе:\n";
cout << "\nТип > " << type;
cout << "\nМощность > " << power;
cout << "\nЦвет > " << color;
cout << "\nСтоимость > " << cost << endl;
}
void lamp::INIT(void) {
cout << "Введите данные о лампе:\n";
cout << "\nТип (если накаливания, то n) > "; cin >> type;
cout << "\nМощность > "; cin >> power;
cout << "\nЦвет > "; cin >> color;
cout << "\nСтоимость > "; cin >> cost;
}
char* lamp::gettype (void) {
return type;
}
void lamp::TEST(void) {
cout << "\nТип > " << type;
cout << "\nМощность > " << power;
cout << "\nЦвет > " << color;
cout << "\nСтоимость > " << cost << endl;
}
void main() {
setlocale(0, "");
// конструктор по умолчанию для 1 экземпляра класса
lamp l1;
cout << "Введение данных для первого товара." << endl;
l1.INIT();
// конструктор с параметрами для 2 экземпляра класса
cout << endl << "Информация про второй объект: \n";
lamp l2("накаливания", 950, "желтый", 1580);
// конструктор копирования для третьего объекта
cout << endl << "Информация про третий объект: \n";
lamp l3(l2);
// вывел информацию про все лампы с помощью метода SHOW
l1.SHOW();
l2.SHOW();
l3.SHOW();
// создаю массив из двух объектов с помощью конструктора по умолчанию
lamp la[2];
// ввожу данные в массив объектов с помощью метода INIT
cout << "Заполним массив объектов из 2 элементов." << endl;
for(int i = 0; i < 2; i++) {
la[i].INIT();
}
// вывожу данные из массива объектов с помощью метода SHOW
cout << "Показываю элементы." << endl;
for (int i = 0; i < 2; i++) {
la[i].SHOW();
}
// ищу и вывожу информацию про лампы, с типом накаливания
cout << "Поиск и вывод информации с типом накаливания." << endl;
for (int i = 0; i < lamp.size; i++) {
if (lamp[i].gettype == "n") {
cout << endl << " номер лампы : " << (i + 1) << endl;
lamp[i].TEST();
cout << endl;
}
}
system("pause");
}
Ответы (1 шт):
Никогда не проверяйте С-строки (char*), просто используя == - это вы сравниваете два указателя, и не более того...
Далее, void main()... уже много лет стандарт требует писать int main().
Еще - пожалуйста, приучите себя использовать const. Вот вы пишете
lamp(char *t, ...
Значит ли это, что ваш конструктор будет изменять переданную ему строку? Нет? Вы просто ее копируете? А откуда же об этом знать компилятору, раз вы не написали const? А менять литералы нельзя, вы не можете неявно привести "Hello" к указателю на char - только к указателю на const char. Меняйте все эти
lamp(char *t, ...
на
lamp(const char *t, ...
Вот тут
for (int i = 0; i < lamp.size; i++) {
совсем непонятно. Никакого size в вашем классе lamp нет, да и обращение lamp.size неправильное - ведь lamp - это класс, тип, но не объект! Тут надо всерьез переписывать и разбираться вам, это не синтаксическая ошибка...
То же самое и здесь -
lamp[i].gettype
непонятное обращение - через имя класса, как к массиву, обращение к функции без ()...
Знаете, какое ощущение? Вы взяли чужой код, не думая, что-то поменяли, и теперь надеетесь последовательными вопросами здесь на сайте довести его до ума, раз уж тут не делают полностью домашку за других... Очень неприятное ощущение.
