Расчет расстояния: метод «должен вернуть значение»? - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь вызвать метод dist(), но постоянно получаю сообщение о том, что dist() должно возвращать значение.

// creating array of cities
double x[] = {21.0,12.0,15.0,3.0,7.0,30.0};
double y[] = {17.0,10.0,4.0,2.0,3.0,1.0};

// distance function - C = sqrt of A squared + B squared

double dist(int c1, int c2) {
    z = sqrt ((x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
    cout << "The result is " << z;
}

void main()
{
    int a[] = {1, 2, 3, 4, 5, 6};
    execute(a, 0, sizeof(a)/sizeof(int));

    int  x;

    printf("Type in a number \n");
    scanf("%d", &x);

    int  y;

    printf("Type in a number \n");
    scanf("%d", &y);

    dist (x,y);
} 

Ответы [ 5 ]

7 голосов
/ 13 марта 2012

Либо измените тип возврата на void:

void dist(int c1, int c2) {

  z = sqrt ((x[c1] - x[c2] * x[c1] - x[c2]) +
           (y[c1] - y[c2] * y[c1] - y[c2]));
  cout << "The result is " << z;
}

, либо верните значение в конце функции:

double dist(int c1, int c2) {

  z = sqrt ((x[c1] - x[c2] * x[c1] - x[c2]) +
           (y[c1] - y[c2] * y[c1] - y[c2]));
  cout << "The result is " << z;
  return z;
}
4 голосов
/ 13 марта 2012

Объявлена ​​функция dist, которая возвращает double, но ничего не возвращает. Вам необходимо явно вернуть z или изменить тип возвращаемого значения на void

// Option #1 
double dist(int c1, int c2) {
    z = sqrt (
         (x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
      cout << "The result is " << z;
    return z;
}

// Option #2
void dist(int c1, int c2) {
    z = sqrt (
         (x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
      cout << "The result is " << z;
}
3 голосов
/ 13 марта 2012

Вы выводите «Result is z» в STDOUT, но фактически не возвращаете его как результат функции dist.

Так что

double dist(int c1, int c2) {

    z = sqrt (
         (x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
      cout << "The result is " << z;
}

должно быть

double dist(int c1, int c2) {

    z = sqrt (
         (x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
      cout << "The result is " << z;
    return(z);
}

(при условии, что вы все еще хотите его напечатать).


В качестве альтернативы

Вы можете объявить, что dist не возвращаетзначение с использованием void:

void dist(int c1, int c2) {

    z = sqrt (
         (x[c1] - x[c2] * x[c1] - x[c2]) + (y[c1] - y[c2] * y[c1] - y[c2]));
      cout << "The result is " << z;
}

См .: Учебник по функциям C ++ .

0 голосов
/ 13 марта 2012

Поскольку вы определили dist для возврата double ("двойной dist"), в нижней части dist () вы должны выполнить "return dist;"или измените «double dist» на «void dist» - void означает, что ему не нужно ничего возвращать.

0 голосов
/ 13 марта 2012

просто добавьте следующую строку: return z;-1 за такой вопрос.

...