C++ - Ошибка: ожидаемый неполный идентификатор перед 'использованием'

У меня есть программа C++ и когда я пытаюсь скомпилировать ее, она дает ошибку:

calor.h|6|error: expected unqualified-id before ‘using’|

Вот заголовочный файл для calor класс:

#ifndef _CALOR_
#define _CALOR_

#include "gradiente.h"

using namespace std;

class Calor : public Gradiente
{
public:
    Calor();
    Calor(int a);
    ~Calor();

    int getTemp();
    int getMinTemp();
    void setTemp(int a);
    void setMinTemp(int a);

    void mostraSensor();
};
#endif

Почему это происходит?

Этот класс наследовался gradiente:

#ifndef _GRADIENTE_
#define _GRADIENTE_

#include "sensor.h"

using namespace std;

class Gradiente : public Sensor
{
protected:
    int vActual, vMin;
public:
    Gradiente();
    ~Gradiente();
}
#endif

Который в свою очередь наследовался sensor

#ifndef _SENSOR_
#define _SENSOR_

#include <iostream>
#include <fstream>
#include <string>

#include "definicoes.h"

using namespace std;

class Sensor
{
protected:
    int tipo;
    int IDsensor;
    bool estadoAlerta;
    bool estadoActivo;
    static int numSensores;
public:
    Sensor(/*PARAMETROS*/);
    Sensor(ifstream &);
    ~Sensor();

    int getIDsensor();
    bool getEstadoAlerta();
    bool getEstadoActivo();

    void setEstadoAlerta(int a);
    void setEstadoActivo(int a);

    virtual void guardaSensor(ofstream &);
    virtual void mostraSensor();
    // FUNÇÃO COMUM
    /* virtual int funcaoComum() = 0;
    virtual int funcaoComum(){return 0;};*/
};
#endif

Для пользы полноты вот definicoes.h

#ifndef _DEFINICOES_
#define _DEFINICOES_

const unsigned int SENSOR_MOVIMENTO = 0;
const unsigned int SENSOR_SOM = 1;
const unsigned int SENSOR_PRESSAO = 2;
const unsigned int SENSOR_CALOR = 3;
const unsigned int SENSOR_CONTACTO = 4;

const unsigned int MIN_MOVIMENTO = 10;
const unsigned int MIN_SOM = 10;
const unsigned int MIN_PRESSAO = 10;
const unsigned int MIN_CALOR = 35;
#endif

Что я делаю неправильно?

8
задан Eric Leschinski 11 July 2013 в 14:08
поделиться

3 ответа

В конце этого класса не хватает точки с запятой:

class Gradiente : public Sensor
{
protected:
    int vActual, vMin;
public:
    Gradiente();
    ~Gradiente();
}                       // <-- semicolon needed after the right curly brace.

Кроме того, имена ваших включаемых охранников являются незаконными. Имена, начинающиеся с подчеркивания и заглавной буквы, зарезервированы для реализации C++ (как и имена, содержащие двойное подчеркивание) - вам не разрешается создавать такие имена в своем собственном коде. И вы никогда не должны использовать:

using namespace std;

в заголовочном файле. И, наконец, деструктор в вашем базовом классе Sensor почти наверняка должен быть виртуальным.

19
ответ дан 5 December 2019 в 05:07
поделиться

В gradiente.h вы забыли точку с запятой в конце объявления класса.

Вам нужно вот это:

class Gradiente : public Sensor
{
    protected:
        int vActual, vMin;
    public:
        Gradiente();
        ~Gradiente();
};  

Видите добавленную точку с запятой?

10
ответ дан 5 December 2019 в 05:07
поделиться

Вы забыли оставить последнее двоеточие в закрывающих скобках, };, в классе gradiente.

5
ответ дан 5 December 2019 в 05:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: