2014-02-07 2 views
-3

я создал быстрый метод в моей программе для вычисления расстояния между двумя точками, используя расстояние формулу, вот код:Ошибка: выражение не может использоваться как функция?

#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» переменный говоря, что «ошибка: выражение не может использоваться как функция». Что это значит? и что я делаю неправильно?

ответ

6

Будьте осторожны, (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; 
} 
+1

Ах! Спасибо! Я объяснял это во время математического класса, и это полностью заставило меня вспомнить о силовой функции, спасибо вам большое – LoreleiRS

+1

На всякий случай, вас интересует, '^' (XOR) на самом деле является оператором в C/C++. См. Http://www.cplusplus.com/doc/boolean/ –

+0

Почему бы не изменить возвращаемый тип функции на 'double'? – ForceBru

1

ошибка компилятора, поскольку 2(y1-y2) является недействительным синтаксиса.

В этом случае 2 (или, возможно, (x1-x2)^2) является «выражением», а (y1-y2) принимается как список аргументов вызова функции; эта грамматическая постановка просто не допускается.

Сравните следующую форму, в которой вводится двоичный оператор (*), который, в свою очередь, обрабатывает последующий (y1-y2) как выражение (ограниченное группировкой скобок), а не вызов функции. Хотя он не будет делать то, что необходимо, так как ^ не является возведения в степень, и получившееся уравнение является бессмысленным, оно должно анализировать и компилировать.

sqrt((x1-x2)^2*(y1-y2)^2) 
Смежные вопросы