Maison >développement back-end >C++ >Comment résoudre l'erreur de compilation C++ : « déclaration des ombres « variables » d'un local précédent » ?

Comment résoudre l'erreur de compilation C++ : « déclaration des ombres « variables » d'un local précédent » ?

王林
王林original
2023-08-27 11:34:511434parcourir

解决C++编译错误:'declaration of 'variable' shadows a previous local',如何解决?

Résoudre l'erreur de compilation C++ : 'déclaration de 'variable' ombre un local précédent', comment la résoudre ?

Lors de l'écriture de programmes C++, vous rencontrez souvent diverses erreurs de compilation. L'une des erreurs courantes est : « déclaration de « variable » ombres à une variable locale précédente », la traduction chinoise est : « déclaration de « variable » ombres à une variable locale précédente ». Cette erreur se produit généralement lors de l'utilisation de variables portant le même nom, empêchant le compilateur d'identifier quelle variable est utilisée. Cet article présentera la cause de cette erreur et proposera des solutions.

1. Cause de l'erreur

En C++, lorsqu'une nouvelle variable est définie dans une portée et que le nom de cette variable a le même nom que les autres variables de la portée, cette erreur se produit. Le compilateur ne peut pas identifier quelle variable est utilisée, il signalera donc une erreur.

Regardons un exemple de code ci-dessous qui montre comment cette erreur se produit :

#include <iostream>

int main() {
    int num = 5;
    
    if (num > 0) {
        int num = 10; // 错误的代码行
        std::cout << "Inner num: " << num << std::endl;
    }
    
    std::cout << "Outer num: " << num << std::endl;
    
    return 0;
}

Dans ce code, nous définissons une variable entière num dans la fonction principale et l'initialisons à 5. Ensuite, une variable num portant le même nom est à nouveau définie dans le bloc d'instruction if et initialisée à 10. À ce moment-là, le compilateur signalera une erreur et affichera « déclaration de « num » ombre un local précédent ».

2. Solution

Pour résoudre cette erreur de compilation, nous devons faire attention à la portée et au changement de nom des variables. Voici plusieurs solutions courantes :

2.1 Modifier le nom de la variable du même nom

Le moyen le plus simple consiste à modifier le nom de la variable du même nom pour garantir que le nom de la variable est unique dans la même portée. Dans l'exemple de code ci-dessus, nous pouvons modifier le nom de la variable interne comme suit :

#include <iostream>

int main() {
    int num = 5;
    
    if (num > 0) {
        int innerNum = 10; // 修改变量名
        std::cout << "Inner num: " << innerNum << std::endl;
    }
    
    std::cout << "Outer num: " << num << std::endl;
    
    return 0;
}

En changeant le nom de la variable interne en innerNum, nous n'aurons plus de noms en double et le compilateur ne signalera pas d'erreur.

2.2 Utiliser des variables globales

Une autre solution consiste à utiliser des variables globales. En C++, les variables globales sont accessibles dans n'importe quelle portée, ce qui permet d'éviter le problème des noms de variables en double. Voici un exemple :

#include <iostream>

int num = 5; // 全局变量

int main() {
    if (num > 0) {
        int num = 10; // 与全局变量没有重名
        std::cout << "Inner num: " << num << std::endl;
    }
    
    std::cout << "Outer num: " << num << std::endl;
    
    return 0;
}

Dans cet exemple, nous définissons la variable num comme une variable globale, puis définissons à nouveau une variable locale num à l'intérieur du bloc d'instruction if qui n'a pas le même nom que la variable globale. Cela évite le problème de la duplication des noms de variables.

2.3 Utiliser des espaces de noms

La dernière solution consiste à utiliser des espaces de noms. Les espaces de noms peuvent être utilisés pour isoler différentes étendues et garantir que les noms de variables n'entrent pas en conflit. Voici un exemple :

#include <iostream>

namespace InnerSpace {
    int num = 10;
}

int main() {
    int num = 5;
    
    if (num > 0) {
        std::cout << "Inner num: " << InnerSpace::num << std::endl; // 使用命名空间限定符访问变量
    }
    
    std::cout << "Outer num: " << num << std::endl;
    
    return 0;
}

Dans cet exemple, nous utilisons un espace de noms appelé InnerSpace avec une variable num définie dedans. À l'intérieur de la fonction principale, nous définissons une variable locale num qui n'a pas le même nom que la variable dans l'espace de noms. À l'intérieur du bloc d'instruction if, nous utilisons le qualificatif d'espace de noms InnerSpace::num pour accéder aux variables dans l'espace de noms.

Conclusion

En programmation C++, il est très courant de rencontrer des erreurs de compilation. L'une des erreurs courantes est : « déclaration d'ombres « variables » d'un local précédent ». En comprenant la cause de l'erreur et en utilisant les bonnes solutions, nous pouvons facilement corriger et éviter cette erreur. Bien que la correction des erreurs nécessite certaines compétences, avec une dénomination des variables et une gestion de la portée appropriées, nous pouvons écrire un code plus fiable et plus clair.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn