Приветствую, о могучие кодеры,
Я новичок и у меня тут проблемы.
Вот мой базовый класс (sensor.h):
class sensor
{
private:
int sensor_id;
string sensor_name;
string sensor_type;
float reading;
public:
sensor();
sensor(int, char*, char*);
~sensor();
/* Few extra methods here */
};
... и я хочу создать 4 других класса, которые наследуются от моего базового класса датчик (датчик температуры, датчик влажности... и так далее).
#include "sensor.h"
class temperaturesensor:public sensor
{
public:
Temperatursensor(int, char*,char*);
~Temperatursensor();
/* Few extra methods here */
};
Дело в том, что каждый из этих классов должен находиться в своем собственном файле .cpp/.h, а затем включаться и использоваться в моем main.cpp.
using namespace std;
#include <xyz.h>
/* Other libaries here */
....
#include "temperaturesensor.h"
#include "humiditysensor.h"
int main()
{
sensor* station[2];
station [0] = new temperaturesensor(x,y,z);
station [1] = new humiditysensor(x,y,z);
}
Если я включу один из них, это не имеет большого значения. Однако: если я использую несколько, я получаю ошибку переопределения.
ошибка C2011: «датчик»: переопределение типа «класс» c:\users\name\desktop\project\sensor.h 14
error c2011: 'temperaturesensor' : 'class' typeredefinition
Что я могу сделать, чтобы обойти это? Обратите внимание, что мне не разрешено использовать #pragma один раз
Извините за мою глупость и заранее спасибо!
#pragma once
. - person Bathsheba   schedule 29.06.2017#pragma once
в ваших заголовочных файлах? - person Some programmer dude   schedule 29.06.2017std::string
в своем классе, используйтеstd::string
в параметрах вашего конструктора. Компилятор может преобразовыватьchar *
вstd::string
, поэтому вы можете вызывать конструктор с символьными литералами. - person Thomas Matthews   schedule 29.06.2017station[2]
- это доступ за пределами границ и, следовательно, неопределенное поведение. Предположительно, вы имели в виду использование индексов0
и1
, а не1
и2
. - person Walter   schedule 29.06.2017