我开始学习C++了.这是我遇到的一个问题:
#includeusing namespace std; #define PI 3.14; int main(){ double r = 5.0; double circle; double inp; circle = 2 * PI * r; cout << circle; cin >> inp; }
它显示错误:error C2100: illegal indirection
.我用谷歌搜索但没有找到答案.谢谢
#define PI 3.14;
这;
是错的,删除它.
顺便说一句,你的行扩展为circle = 2 * 3.14; * r;
所以编译器然后抱怨*r,这解释了错误消息.
宏是(相对)简单的替换,所以,当你写:
#define PI 3.14; circle = 2 * PI * r;
它实际上最终为:
circle = 2 * 3.14; * r;
实际上有两个陈述:
circle = 2 * 3.14; * r;
如果r
是某个描述的指针,那最后一行将是一个完全有效的表达式(尽管它不是非常有用的表达式).然而,鉴于它是一个双倍,这是你从非法间接的地方.
除非在非常特殊的情况下,否则现在通常应该避免使用宏.使用它们来提供内联函数主要由inline
关键字("大多数")包含,因为inline
关键字只是一个建议.
此外,使用它来提供常量可以通过const
关键字更好地完成(具有完整类型支持和通常更好的调试的优点).
换句话说,你的PI
常量会更好地写成:
const double PI = 3.141592653589;
我现在使用预处理器的唯一地方就是条件编译.
除此之外,你可能意味着circumference
而不是circle
.前者是圆圈外侧的长度,后者根本不是长度值.