C++ 带有#define的错误

C++ 带有#define的错误,c++,global-variables,constants,c-preprocessor,C++,Global Variables,Constants,C Preprocessor,我有一个文件,其中包含许多#define语句,例如- #ifndef UTILITY_H #define UTILITY_H #define BUMP 7; #define WHEEL_DROPS 7; #define WALL 8; #define CLIFF_LEFT 9; #define CLIFF_FRONT_LEFT 10; #define CLIFF_FRONT_RIGHT 11; #define CLIFF_RIGHT 12; #define VIRTUAL_WALL 13; ..

我有一个文件,其中包含许多
#define
语句,例如-

#ifndef UTILITY_H
#define UTILITY_H
#define BUMP 7;
#define WHEEL_DROPS 7;
#define WALL 8;
#define CLIFF_LEFT 9;
#define CLIFF_FRONT_LEFT 10;
#define CLIFF_FRONT_RIGHT 11;
#define CLIFF_RIGHT 12;
#define VIRTUAL_WALL 13;
...
... 
#endif
该列表接着列出了大约42个不同的值。我将此文件包含到其他文件中,但每当我尝试使用其中一个常量时,都会出现错误。举个具体的例子,我试着做-

Sensor_Packet temp;
temp = robot.getSensorValue(BUMP); //line 54
cout<<temp.values[0]<<endl;
我不明白为什么会出现这些错误,因为已经定义了凹凸。当我尝试使用switch语句时也会发生这种情况,其中cases是defines-

switch(which) {
case BUMP:
    //do stuff
case CLIFF_LEFT:
   //do stuff
}

关于使用
#define
,我遗漏了什么吗?我想我所要做的就是定义一个常数,然后我就可以调用它了。感谢您的帮助。

仔细查看您的
\define
s:

#define BUMP 7;
这告诉预处理器用
7替换
BUMP
。请注意,宏定义包含分号

因此,在编译器看来,您的代码实际上是这样的:

Sensor_Packet temp;
temp = robot.getSensorValue(7;);
cout<<temp.values[0]<<endl;

// ...

switch(which)
{
case 7;:
    // do stuff
case 9;:
    //do stuff
}

这种方法更可取,因为与定义不同,
const int
s和
enum
s尊重范围,并且更安全。请仔细查看您的定义:

#define BUMP 7;
这告诉预处理器用
7替换
BUMP
。请注意,宏定义包含分号

因此,在编译器看来,您的代码实际上是这样的:

Sensor_Packet temp;
temp = robot.getSensorValue(7;);
cout<<temp.values[0]<<endl;

// ...

switch(which)
{
case 7;:
    // do stuff
case 9;:
    //do stuff
}

这种方法更可取,因为与
#define
s不同,
const int
s和
enum
s尊重范围,并且更安全。

移除分号,你就可以开始了。

移除分号,你就可以开始了。

(+1)澄清一下:移除
在所有
之后定义
语句(+1)以澄清:删除
在你的<代码>定义了< /Calp> StastSt.这只是出现在关于“喜欢的一行C++ C++ bug”(昨天?)的问题上。