一元'*'的无效类型参数(具有双精度)

时间:2019-04-08 07:38:56

标签: c++

刚开始学习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";
}

有人可以向我解释我做错了什么。谢谢

3 个答案:

答案 0 :(得分:3)

#define M_PI

应该是

#define M_PI 3.14159

(或您想要给pi赋予的任何值)。

您将M_PI定义为空,表示此代码

  area = M_PI * radius * radius;

成为此代码

  area = * radius * radius;

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

答案 1 :(得分:2)

我建议使用:

#define _USE_MATH_DEFINES
#include <cmath>

并删除此行:

#define M_PI

此答案的更多信息:M_PI works with math.h but not with cmath in Visual Studio

答案 2 :(得分:1)

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

area = M_PI * radius * radius

成为

area = * radius * radius

,第一个星号成为一元运算符,整个表达式解释为

area = (* radius) * radius

该一元星号不能合理地与double参数一起使用,因此会产生错误消息。