C++ - 错误:'using'之前的预期unqualified-id

F. *_* P. 8 c++ inheritance

我有一个C++程序,当我尝试编译它时会出错:

calor.h|6|error: expected unqualified-id before ‘using’|
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

该类继承自gradiente:

#ifndef _GRADIENTE_
#define _GRADIENTE_

#include "sensor.h"

using namespace std;

class Gradiente : public Sensor
{
protected:
    int vActual, vMin;
public:
    Gradiente();
    ~Gradiente();
}
#endif
Run Code Online (Sandbox Code Playgroud)

而这又从中继承而来 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
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这里是 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
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

小智 19

在本课程结束时缺少分号:

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

此外,您的包含警卫的名称是非法的.以下划线和大写字母开头的名称是为C++实现保留的(包含双下划线的名称) - 不允许在自己的代码中创建此类名称.你永远不应该使用:

using namespace std;
Run Code Online (Sandbox Code Playgroud)

在头文件中.最后,传感器基类中的析构函数几乎可以肯定是虚拟的.

  • 只是为了澄清,你永远不应该使用"使用命名空间std"(或任何其他命名空间)的原因是因为你的类的用户不会期望他们的全局名称空间被命名空间中的所有这些东西污染std,当他们没有要求它.通常,您希望将添加到标题中的全局命名空间的内容限制为完成工作所需的最小值,否则可能会引入名称冲突和其他有趣的内容. (3认同)

Geo*_*rge 10

在gradiente.h中,您在类声明结束时忘记了分号.

你需要这个:

class Gradiente : public Sensor
{
    protected:
        int vActual, vMin;
    public:
        Gradiente();
        ~Gradiente();
};  
Run Code Online (Sandbox Code Playgroud)

看到添加的分号?

  • ["啊,缺少分号......唯一的原因,女孩会跟我回来的单天."(http://www.reddit.com/r/programming/comments/b8ws6/)`:)` (2认同)

whe*_*ies 5

您忘记将最后一个半冒号};留在gradiente类的右括号中。