Не компилируется// '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 шт):
Если уж вы в файл 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, а потом удалили лишнее - так вот, надо удалять всё лишнее, а не только видимое на экране :)