Не компилируется// 'Proga' has not been declared файл tovar.cpp

Tovar.cpp

#include "Tovar.h"


Tovar::Tovar()
{

}

Tovar::~Tovar()
{

}

void Tovar::SetNam(string Nam)
{
    Name=Nam;
}

void Tovar::SetYear(int Year)
{
    YearProd=Year;
}

string Tovar::GetNam()
{
    return Name;
}

string Tovar::GetFirm()
{
    return Firm;
}

int Tovar::GetYear()
{
    return YearProd;
}

void Tovar::Show()
{
    cout<<"Name: "<<left<<setw(15)<<Name<<" YearProd: "<<setw(4)<<YearProd<<" Firma: "<<setw(10)<<Firm<<endl;
}
void Proga::Setting()
{
    cout<<"\n\t\t\tОшибка!\n";
}

int Proga::chek()
{
    return 0;
}

Tovar.h

#define TOVAR_H

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

class Tovar
{
    public:
        Tovar();
        ~Tovar();
        void SetNam(string Nam);
        void SetYear(int Year);
        string GetNam();
        string GetFirm();
        int GetYear();
        virtual void Show();
        virtual void Setting();
        virtual int chek();
    protected:
        string Name;
        int YearProd;
        string Firm;
    private:
};

#endif // TOVAR_H

main.cpp

#include "Otv.h"
#include "Fridge.h"
#include <windows.h>

using namespace std;

int main()
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    Otv O1 ("LGSmartTV", 2020, "LG","FullHD");
    Otv O2 ("SonySmartTV", 2019, "Sony","HD");
    Fridge F1 ("Vinter255", 2016, "Nord","Big");
    Fridge F2 ("Coldester3000", 2018, "Samsing", "Small");
    Tovar* T[100];
    T[0]=&O1;
    T[1]=&O2;
    T[2]=&F1;
    T[3]=&F2;
    char q;
    do
    {
        system("cls");
        cout<<setw(61)<<setfill('_')<<"_"<<"\n\n „лЯ работы с массивами данных используютсЯ следующие кнопки:\
        \n\"R\"-ђедактирование объектов;\n\"S\"-Џоказать объекты массива на экране\
        \n\"V\"-‚ычисление заданного параметра;\n\"Z\"-‚ыход из программы;\n"<<setw(61)<<"_"<<setfill(' ')<<endl;
        switch (q)
        {
           case 'R':
            {
                int j;
                cout<<"‚ведите номер записи длЯ редактированиЯ:\n"; cin>>j;
                T[j-1]->Setting();
                break;
            }
                case 'S':
            {
                for(int i=0;i<4;i++)
                {
                    cout<<i+1<<"\t";
                    T[i]->Show();
                }
                break;
            }
case 'V':
            {   int w=0;
                cout<<"‚ведите название фирмы:\n";
                string a;
                cin.ignore();
                getline(cin,a);
                for(int i=0;i<4;i++)
                {
                    if(T[i]->GetFirm()==a)
                    w++;
                }
                cout<<"Ќадено: "<<w<<endl;
                break;
            }
        }
        cout<<"\n ‚ведите команду: "; cin>>q;
    }
   while(q!='Z');
    system("cls");
    cout<<"\n\n\n\n\n\t\t\t‡авершение работы\n\n\n\n\n";
    return 0;
}

Fridge.cpp

#include "Fridge.h"

Fridge::Fridge(string Nam, int Year, string Fir, string Rac)
{
    Name=Nam;
    YearProd=Year;
    Firm=Fir;
    Racy=Rac;
}

Fridge::~Fridge()
{

}

void Fridge::SetRac(string Rac)
{
    Racy=Rac;
}

string Fridge::GetRac()
{
    return Racy;
}

void Fridge::Show()
{
    cout<<"Name: "<<left<<setw(15)<<Name<<" Year: "<<setw(4)<<YearProd<<" Firma: "<<setw(10)<<Firm<<" Racy: "<<setw(10)<<Racy<<endl;
}

void Fridge::Setting()
{
    string s;
    int l;
    cout<<"Name: ";
    cin.ignore();
    getline(cin,s);
    Name=s;
    cout<<"YearProd: ";
    cin>>l;
    YearProd=l;
    cout<<"Firma: ";
    cin.ignore();
    getline(cin,s);
    Firm=s;
    cout<<"Racy: ";
    getline(cin,s);
    Racy=s;
}

int Fridge::chek()
{
    return 2;
}

Otv.cpp

#include "Otv.h"

Otv::Otv(string Nam, int Year, string Fir, string Typ)
{
    Name=Nam;
    YearProd=Year;
    Firm=Fir;
    Type=Typ;
}

Otv::~Otv()
{

}

void Otv::SetTyp(string Typ)
{
    Type=Typ;
}

string Otv::GetTyp()
{
    return Type;
}

void Otv::Show()
{
    cout<<"Name: "<<left<<setw(15)<<Name<<" YearProd: "<<setw(4)<<YearProd<<" Firma: "<<setw(10)<<Firm<<" Type:  "<<setw(10)<<Type<<endl;
}


void Otv::Setting()
{
    string s="";
    int l;
    cout<<"Name: ";
    cin.ignore();
    getline(cin,s);
    Name=s;
    cout<<"YearProd: ";
    cin>>l;
    YearProd=l;
    cout<<"Firma: ";
    cin.ignore();
    getline(cin,s);
    Firm=s;
    cout<<"Type: ";
    getline(cin,s);
    Type=s;
}

int Otv::chek()
{
    return 1;
}

Fridge.h

#ifndef FRIDGE_H
#define FRIDGE_H

#include "Tovar.h"

class Fridge : public Tovar
{
    public:
        Fridge();
        Fridge(string Nam, int Year, string Fir, string Rac);
        ~Fridge();
        void SetRac(string Sred);
        string GetRac();
        void Show();
        void Setting();
        int chek();
    protected:
    private:
        string Racy;
};

#endif // FRIDGE_H

Otv.h

#ifndef OTV_H
#define OTV_H

#include "Tovar.h"

class Otv : public Tovar
{
    public:
        Otv();
        Otv(string Nam, int Year, string Fir, string Typ);
        ~Otv();
        void SetTyp(string Typ);
        string GetTyp();
        void Show();
        void Setting();
        int chek();
    protected:
    private:
        string Type;
};

#endif // OTV_H

Proga.cpp

#include "Proga.h"

Proga::Proga()
{

}

Proga::~Proga()
{

}

void Proga::SetNam(string Nam)
{
    Name=Nam;
}

void Proga::SetYear(int Year)
{
    YearProd=Year;
}

string Proga::GetNam()
{
    return Name;
}

string Proga::GetFirm()
{
    return Firm;
}

int Proga::GetYear()
{
    return YearProd;
}

void Proga::Show()
{
    cout<<"Name: "<<left<<setw(15)<<Name<<" YearProd: "<<setw(4)<<YearProd<<" Firma: "<<setw(10)<<Firm<<endl;
}

void Proga::Setting()
{
    cout<<"\n\t\t\tОшибка!\n";
}

int Proga::chek()
{
    return 0;
}

Proga.h

#ifndef PROGA_H
#define PROGA_H

#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

class Proga
{
    public:
        Proga();
        ~Proga();
        void SetNam(string Nam);
        void SetYear(int Year);
        string GetNam();
        string GetFirm();
        int GetYear();
        virtual void Show();
        virtual void Setting();
        virtual int chek();
    protected:
        string Name;
        int YearProd;
        string Firm;
    private:
};

#endif // PROGA_H



Что пытаюсь сделать:

1. В соответствии с вариантом задания разработать базовый класс. В базовый класс следует
включить свойства и методы,   общие для заданных классов­наследников.  Базовый класс
должен включать в себя не менее двух свойств и двух методов,   один из которых   –
виртуальная функция. 
2. Разработать классы,   производные от базового класса   (наследники).   Классы­наследники
должны наследовать от базового класса хотя бы одно свойство, а также должны иметь хотя
бы одно собственное свойство.  В классы­наследники должны быть включены следующие
методы:
a. Метод, наследуемый от базового класса без переопределения.
b. Виртуальная функция базового класса, переопределённая в производном классе.
c. Собственные методы производного класса. В состав производного класса должен
быть включён хотя бы один метод, изменяющий какое­либо свойство класса.
3. Разработать программу, выполняющую следующие действия:
a. Создание нескольких объектов на основе классов–наследников.
b. Объединение объектов в массив (массив указателей на базовый класс).
c. Отображение значений свойств объектов на экране в цикле.
d. Изменение свойств объектов по номеру элемента массива.
e. Вычисление заданного параметра.
f. Выход из программы.
4. Объявление и реализацию каждого класса поместить в отдельный модуль.
5. Действия над объектами   (просмотр,   изменение,   вычисление параметра
)   должны быть доступны в меню.

Подскажите почему не компилируется, ошибка 'Proga' has not been declared файл tovar.cpp Заранее спасибо


Ответы (1 шт):

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

Если уж вы в файл tovar.cpp внесли реализацию класса Proga -

void Proga::Setting()
{
    cout<<"\n\t\t\tОшибка!\n";
}

int Proga::chek()
{
    return 0;
}

то должны объяснить компилятору для компиляции этого файла и то, что такое Proga, включив соответствующий заголовочный файл...

Неужели это не очевидно?

P.S. Кстати, вы еще нарветесь на то, что одни и те же функции-члены объявлены в двух файлах. Предупреждаю заранее.

P.P.S. Когда делаете один файл из другого - а я уверен, вы tovar.cpp получили как копию proga.cpp, а потом удалили лишнее - так вот, надо удалять всё лишнее, а не только видимое на экране :)

→ Ссылка