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”(昨天?)的问题上。