Erreur C++ : LINK2005
高洛峰
高洛峰 2017-05-16 13:23:40
0
1
651
  1. Description du problème
    common.h définit tous les alias de type et déclarations de structure, est référencé par mass_diffusion.h et heat_conduction.h, mass_diffusion.h et heat_conduction.h sont Référencé par man.cpp, puis compilé avec succès, une erreur a été signalée lors de la liaisonLINK2005。我已经使用了#ifndef ... #define ... #endifCette syntaxe défensive, chaque fichier n'a qu'une seule fonction d'initialisation exposée à l'extérieur Bien qu'il y ait des fonctions du même nom à l'intérieur du fichier, pourquoi ne sont-elles pas exposées. au monde extérieur ? Une erreur sera-t-elle signalée ?

  2. Message d'erreur
    Visual Studio 2017 compile l'erreur C++ : LNK2005 mass_diffusion.obj "void __cdecl calculate(class std::vector<struct user ,class std::allocator<struct user > > ,class std::vector<struct item ,class std::allocator<struct item > )" a été défini dans heat_conduction.obj.

  3. Codes associés

    //common.h
    #ifndef _COMMON_H
    #define _COMMON_H
    ...
    struct user;
    struct item;
    struct relation;
    ...
    typedef non signé int _container_number_;
    typedef non signé int _value_number_;
    . ..
    typedef std::vecteur<user*> user_container;
    typedef std::vector<item*> item_container;
    #endif // !_COMMON_H
    ...
    //mass_diffusion.h
    #include "common.h"
    extern void init_md(user_container, item_container);
    void calculate(user_container _ulist, item_container _ilist);
    ...
    //mass_diffusion.cpp
    #include "mass_diffusion.h"
    void init_md(user_container _ulist, item_container _ilist){...};
    void calculate(user_container _ulist, item_container _ilist) {...};
    ...
    //heat_conduction.h
    # include "common.h"
    extern void init_hc(user_container _ulist, item_container _ilist);
    void calculate(user_container _ulist, item_container _ilist);
    ...
    //heat_conduction.cpp
    #include "heat_con duction .h"
    void init_hc(user_container _ulist, item_container _ilist){...};
    void calculate(user_container _ulist, item_container _ilist) {...};
    ...
    //main. cpp
    #include "mass_diffusion.h"
    #include "heat_conduction.h"

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(1)
PHPzhong

Une erreur sera signalée à l'origine. Chacun de vos modules est lié au même fichier. L'éditeur de liens sera naturellement confus lorsqu'il verra autant de symboles portant le même nom. L'éditeur de liens ne se souciera pas de ce qui est exposé dans .h. La solution est de rendre chaque module indépendant. Compilez-le dans so ou dll, puis appelez-le ou utilisez un espace de noms

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal