2010-06-03 131 views
8

我有一个C++程序,当我尝试编译它,它提供了一个错误:C++ - 错误:之前预期不合格的ID“使用”

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 

我在做什么错?

回答

18

有一个分号在这个课程结束时丢失:

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

而且,你有警卫的名字是非法的。以下划线和大写字母开头的名称是为C++实现保留的(因为名称包含双下划线) - 您不能在自己的代码中创建这样的名称。而且你不应该使用:

using namespace std; 

在头文件中。最后,传感器基类中的析构函数几乎肯定会变成虚拟的。

+0

谢谢您补充更正! – 2010-06-03 12:14:57

+3

只是为了澄清,你永远不应该使用“using namespace std”(或者任何其他命名空间)的原因是因为你的类的用户不会期望他们的全局命名空间受到所有这些东西的污染命名空间std当他们没有要求它。通常情况下,您希望将添加到头文件中全局名称空间的东西限制到完成工作所需的最小值,否则可能会引入名称冲突和其他有趣的东西。 – George 2010-06-03 12:27:34

10

在gradiente.h中,您忘记了类声明结尾的分号。

你需要这样的:

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

看到添加的分号?

+2

[“啊,失踪的分号......女孩们在单一时间里跟我说话的唯一原因。”](http://www.reddit.com/r/programming/comments/b8ws6/)' :)' – sbi 2010-06-03 12:08:34

4

您忘记在gradiente类的右括号};上留下最后一个分号。

相关问题