Добрый день, первый раз столкнулся с такой проблемой. При компиляции вылазит следующее для каждого метода:
Ошибка LNK2005 "public: __thiscall GVS::GVS(void)" (??0GVS@@QAE@XZ) уже определен в head.obj kurs D:\cpp\kurs\kurs\main.obj 1
Собственно сам код:
head.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class s4et4ik //шаблон
{
private:
double V; //расход в секунду
double energy; //потребляемая энергия
double V_1; //расход за сутки
public:
int T1_enter;
int T2_exit;
s4et4ik(); //конструктор по умолчанию
s4et4ik(double v_per_sec, double Energy, double v_per_day) { // конструктор для счетчиков
V = v_per_sec;
V_1 = v_per_day;
energy = Energy;
}
double get_V(); //получение значения мгновенного расхода
double get_energy(); //получение потребляемой энергии
double get_V_1(); //получение расхода за сутки
int get_t1(); //получение температуры на входе
int get_t2(); //получение температуры на выходе
void change_V_per_sec(); //изменение значения расхода в секунду
void change_V_per_day(); //изменение значение расхода за сутки
void t1_enter(); //температура на входе
void t2_exit(); //температура на выходе
virtual void save(); //сохранение полученных значений
virtual void show_info()=0; //отображение данных
virtual ~s4et4ik() {}
};
class GVS : public s4et4ik { //счетчик горячей воды
private:
double Q; //Гигокаллории
public:
GVS(); //конструктор по умолчанию
GVS(double v_per_sec, double v_per_day, double energy) : s4et4ik(v_per_sec, energy, v_per_day) { // конструктор для ГВС
}
void show_info(); //отображение данных
double ggcall(); //расчет гигокаллорий
void save();
~GVS();
};
class HV : public s4et4ik {
public:
HV(); //конструктор по умолчанию
HV(double v_per_sec, double v_per_day, double energy) : s4et4ik(v_per_sec, energy, v_per_day) {}//конструктор для ХВ
void show_info();
void save();
~HV();
};
head.cpp
#pragma once
#include "head.h"
void GVS::show_info() {
cout << "\t\t\tСчетчик горячей воды" << endl << endl
<< "Мгновенный расход: " << this->get_V() << endl
<< "Расход за сутки: " << this->get_V_1() << endl
<< "Потребляемая энергия: " << this->get_energy()
<< "Гигокаллории: " << this->ggcall() << endl;
}
double s4et4ik::get_energy() {
return this->energy;
}
double s4et4ik::get_V() {
return this->V;
}
double s4et4ik::get_V_1() {
return this->V_1;
}
double GVS::ggcall() {
this->Q = get_V() / (get_t2() - get_t1());
return this->Q;
}
int s4et4ik::get_t2() {
return T2_exit;
}
int s4et4ik::get_t1() {
return T1_enter;
}
void HV::show_info() {
cout << "Температура воды: " << this->get_t1() << endl
<< "Мгновенный расход: " << this->get_V() << endl
<< "Расход за сутки: " << this->get_V_1() << endl;
}
void s4et4ik::change_V_per_day() {}
void s4et4ik::change_V_per_sec() {}
void s4et4ik::t1_enter() {}
void s4et4ik::t2_exit() {}
void s4et4ik::save() {}
void GVS::save() {}
void HV::save() {}
s4et4ik::s4et4ik() {}
GVS::GVS() {}
GVS::~GVS() {}
HV::HV() {}
HV::~HV() {}
main.cpp
#include "head.cpp"
int main() {
return 0;
}
Не делайте так:
#include "head.cpp"
Включайте через #include заголовочный файл с объявлениями, но не с определениями. Так, как сделали вы, у вас масса определенных (не объявленных, а именно определенных) функций оказывается скомпилированной как в файле head.obj, так и в main.obj, и компоновщик не знает, какой из вариантов выбрать.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости