Maison  >  Questions et réponses  >  le corps du texte

c++ - Impossible de placer un espace de noms sans nom dans .h

Un espace de noms sans nom ne peut pas être placé dans .h. Pouvez-vous donner un exemple de la raison pour laquelle cela n'est pas autorisé ?
Je n’ai trouvé aucun exemple après de longues délibérations.

phpcn_u1582phpcn_u15822734 Il y a quelques jours878

répondre à tous(1)je répondrai

  • PHPz

    PHPz2017-05-16 13:23:09

    La clé dépend de la façon de l'utiliser et de ce qu'il faut mettre dans l'espace de noms sans nom. Par exemple, si vous mettez des variables, il y aura des problèmes.

    //one.h
    #include <iostream>
    #include <typeinfo>
    
    namespace {
    class TestClass {
    };
    int i;
    }
    
    const std::type_info& one_get_TestClass_Info();
    const std::type_info& two_get_TestClass_Info();
    
    //one.cpp
    #include "one.h"
    const std::type_info& one_get_TestClass_Info()
    {
        i = 10;
        std::cout << "val: " << i << "   addr: " << &i << std::endl;
        return typeid(TestClass);
    }
    
    //two.cpp
    #include "one.h"
    #include <iostream>
    #include <typeinfo>
    using namespace std;
    
    const std::type_info& two_get_TestClass_Info()
    {
        std::cout << "val: " << i << "   addr: " << &i << std::endl;
        return typeid(TestClass);
    }
    //main.cpp
    
    #include "one.h"
    using namespace std;
    
    int main()
    {
        const std::type_info& t1 = one_get_TestClass_Info();
        const std::type_info& t2 = two_get_TestClass_Info();
        std::cout << "one has type: " << t1.name() << '\n'
                  << "two has type: " << t2.name() << '\n';
        if (t1 == t2) {
            cout << "same type";
        }
    
        return 0;
    }
    
    
    
    

    Le résultat est :

    val: 10   addr: 0x602200
    val: 0   addr: 0x602208
    one has type: N12_GLOBAL__N_19TestClassE
    two has type: N12_GLOBAL__N_19TestClassE
    

    Pour un peu plus de détails, voir ici : https://zsounder.github.io/20….

    répondre
    0
  • Annulerrépondre