错误:表达式不能用作函数
Error: expression cannot be used as a function?
我在程序中创建了一个快速方法,以使用距离公式在两个点之间计算距离,这是代码:
#include <iostream>
#include <cmath>
using namespace std;
int distanceFormula(int x1, int y1, int x2, int y2) {
double d = sqrt((x1-x2)^2(y1-y2)^2);
return d;
}
它在我声明 d
变量的行上给我一个编译器错误,说
error: expression cannot be used as a function
。
这是什么意思?我在做什么错?
请小心,(x1-x2)^2
不会在此处执行2个指数。请参阅http://www.cplusplus.com/reference/cmath/pow/。
第二,您可能忘记了表达式中的+
:
int distanceFormula(int x1, int y1, int x2, int y2) {
double d = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
return d;
}
编译器错误是因为 2(y1-y2)
是语法。
在这种情况下, 2
(或 (x1-x2)^2
)是"表达式",而 (y1-y2)
被作为函数调用参数列表;根本不允许这种语法产生。
比较引入二进制运算符(*
)的以下形式,这又使解析器将后续的(y1-y2)
视为表达式(通过分组括号)而不是函数调用。虽然它不会做所需的事情,但由于^
不是指示性,并且结果方程式是胡说八道,因此应该解析和编译。
sqrt((x1-x2)^2*(y1-y2)^2)
相关文章:
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么虚函数不能是静态的和全局的?
- 为什么继承的受保护构造函数不能公开?
- C++为什么类成员函数不能重新声明,但普通函数可以
- 为什么在C++中使用关系运算符创建的模板函数不能对字符串正常工作?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么模板函数不能作为模板模板参数传递?
- 为什么 free 函数不能在 C 数组上运行,而 std::begin 在某些情况下可以在 C++14 中运行?
- 构造函数不能用于启发性化
- C 错误 - 函数不能超载
- 有没有办法使成员函数不能从构造函数调用
- 为什么模板函数不能是模板类的友元模板函数
- "Framework::Graphics::Material"的默认构造函数不能被引用 - 它是一个已删除的函数
- lower_bound()函数不能在调试模式下编译
- 为什么函数不能正确强制转换指针(从基类到派生类)
- 显式默认函数不能声明为 constexpr,因为隐式声明不是 constexpr
- 琐碎的默认构造函数不能是 constexpr?
- 函数不能嵌套,那么如何在C++中执行此操作
- 错误:成员函数不能在其类之外声明
- 错误-仅返回类型不同的函数不能重载.c++