J'essaie d'apprendre la syntaxe C++, pour cette fonction plus proche_coin ci-dessous, j'obtiens une "utilisation d'identifiant non déclaré" pour la ligne return result dans la fonction closest_coin. Pourquoi cela se produit-il lorsque je déclare le type dans l'instruction if lors de l'affectation du résultat de la variable ?

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

class Point{
    public:
        int x,y;
        Point(int x_position, int y_position){
            x = x_position;
            y = y_position;
        }
        int calculate_distance(Point other_point);
};

int Point::calculate_distance(Point p2){

    int x_distance = abs(x-p2.x);
    int y_distance = abs(y-p2.y);
    int result = x_distance-y_distance;

    return result;
}

Point closest_coin(Point your_position, vector<Point> coin_positions){
    int closest_distance = -1;
    int distance;

    for (Point coin : coin_positions){
        distance = your_position.calculate_distance(coin);

        if (distance>closest_distance){
            Point result = coin;
            closest_distance = distance;
        }
    }

    return result;
}
c++
0
Cr1064 11 oct. 2019 à 01:13

1 réponse

Meilleure réponse

quand je déclare le type à l'intérieur de l'instruction if

Lorsque vous déclarez quoi que ce soit dans { et }, cette variable n'est valide que là-bas. Cela ne fonctionnera pas non plus si vous le déclarez en dehors de la boucle if mais à l'intérieur de la boucle for pour la même raison.

Vous pouvez simplement déclarer la variable result au début de votre fonction closest_coin et ne l'affecter qu'à l'intérieur du if.

Remarque : votre classe Point n'a pas de constructeur par défaut. Par conséquent, vous devrez définir une valeur lors de la déclaration. Votre méthode closest_coint devient

Point closest_coin(Point your_position, vector<Point> coin_positions){
    int closest_distance = -1;
    int distance;

    Point result(0,0);
    for (Point coin : coin_positions){
        distance = your_position.calculate_distance(coin);

        if (distance>closest_distance){
            result = coin;
            closest_distance = distance;
        }
    }

    return result;
}
0
darcamo 10 oct. 2019 à 22:27