一元“*”的类型参数无效(具有双精度) 刚开始学习C++得到了这个错误:

一元“*”的类型参数无效(具有双精度) 刚开始学习C++得到了这个错误:,c++,C++,C:\Users\KC\Documents\Math.cpp | 9 |错误:一元“*”的无效类型参数具有“double”| 代码如下: #include <iostream> #include <cmath> #define M_PI using namespace std; int main() { double area, radius = 1.5; area = M_PI * radius * radius; cout <<

C:\Users\KC\Documents\Math.cpp | 9 |错误:一元“*”的无效类型参数具有“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";
}
有人能解释一下我做错了什么吗。谢谢

#define M_PI
应该是

#define M_PI 3.14159
或者你想给π取什么值

您将M_PI定义为nothing,这意味着

  area = M_PI * radius * radius;
  area = * radius * radius;
变成这个代码

  area = M_PI * radius * radius;
  area = * radius * radius;

您的编译器正在抱怨意外的*

您使用了预处理器指令define M_PI,该指令将M_PI定义为空字符串。因此,在将空内容替换为M_PI之后,表达式

area = M_PI * radius * radius
变成

area = * radius * radius
第一个星号变成了一元运算符,整个表达式解释为

area = (* radius) * radius
一元星号不能合理地与双参数一起使用,因此会显示一条错误消息。

我建议使用:

#define _USE_MATH_DEFINES
#include <cmath>

此答案中的更多信息:

您尚未为M_PI设置值。另见。如果没有M_PI的值,您的面积分配就会变成“面积=*半径*半径”。因此出现了错误。您使用的是哪种编译器?一些标准库在包含时定义了自己的M_PI。我强烈建议您选择一个不同的名称,否则您会要求冲突和未定义的行为。@chris冲突的M_-PI预处理器符号应该如何导致未定义的行为?@user463035818,我记错了。是的,你会得到一个编译器错误,这不是理想的程序是可移植的,但比UB更好。我相信我把它和多个定义混在一起了。这就是为什么constexpr double M_PI在我看来会更好的原因之一。你不能忘记指定一个值是的,这就是问题所在,谢谢+1最佳答案,因为没有人应该重新定义pi。尽管它在VisualStudio中不起作用让人很不安。