Не получается организовать вывод данных

У меня есть класс лампочек 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 шт):

Автор решения: Harry

Никогда не проверяйте С-строки (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

непонятное обращение - через имя класса, как к массиву, обращение к функции без ()...

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

→ Ссылка