2010-06-03 24 views
8

Tengo un programa en C++ y cuando intento compilar que se da un error:C++ - Error: se esperaba sin reservas-id antes 'usando'

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

Aquí está el archivo de cabecera para la clase 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 

¿Por qué sucede esto?

Esta clase hereda de gradiente:

#ifndef _GRADIENTE_ 
#define _GRADIENTE_ 

#include "sensor.h" 

using namespace std; 

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

Que a su vez hereda de 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 

Para completarlo, aquí está 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 

¿qué estoy haciendo mal?

Respuesta

18

Hay una falta punto y coma al final de esta clase:

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

Además, los nombres de las necesidades de inclusión guardias son ilegales. Los nombres que comienzan con un guión bajo y una letra mayúscula están reservados para la implementación de C++ (como lo son los nombres que contienen un doble guión bajo); no está permitido crear dichos nombres en su propio código. Y nunca debe usar:

using namespace std; 

en un archivo de encabezado. Y, por último, el destructor en su clase de base del sensor debería casi ser virtual.

+0

¡Gracias por sus correcciones adicionales! –

+3

Solo para aclarar, la razón por la que nunca debes usar "using namespace std" (o eso con cualquier otro espacio de nombres, para el caso) es porque los usuarios de tu clase no esperan que su espacio de nombres global se contamine con todo esto namespace std cuando no lo pidieron. Por lo general, desea limitar la cantidad de elementos que agrega al espacio de nombres global en sus encabezados al mínimo requerido para realizar el trabajo, de lo contrario corre el riesgo de introducir conflictos de nombres y otras cosas divertidas. – George

10

En gradiente.h ha olvidado el punto y coma al final de su declaración de clase.

Esto es necesario:

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

Véase el punto y coma añadido?

+2

["Ah, el punto y coma que falta ... La única razón por la que las chicas me hablaban en los días de la universidad"]] (http://www.reddit.com/r/programming/comments/b8ws6/) ' :) ' – sbi

4

Olvidó dejar el último punto y coma en los corchetes de cierre, };, en la clase de gradiente.

Cuestiones relacionadas