【发布时间】:2019-04-08 07:38:55
【问题描述】:
刚开始学习c++就出现这个错误:
C:\Users\KC\Documents\Math.cpp|9|error: invalid type argument of unary '*' (have 'double')|
这是代码:
#include <iostream>
#include <cmath>
#define M_PI
using namespace std;
int main()
{
double area, radius = 1.5;
area = M_PI * radius * radius;
cout << area << "\n";
}
谁能向我解释我做错了什么。谢谢
【问题讨论】:
-
您没有为 M_PI 设置值。另见stackoverflow.com/questions/6563810/…。如果没有 M_PI 的值,您的区域分配将简单地变为“区域 = * 半径 * 半径”。因此出现错误。
-
你使用的是哪个编译器?
-
一些标准库在包含
时定义了自己的 M_PI。我强烈建议您选择不同的名称,否则您会要求冲突和未定义的行为。 -
@chris 碰撞的
M_PI预处理器符号应该如何导致未定义的行为? -
@user463035818,我记错了。是的,你会得到一个编译器错误,这对于让程序可移植并不理想,但比 UB 更好。 (我相信我把它和多个 ODR-related 定义混在一起了。)
标签: c++