検索

ホームページ  >  に質問  >  本文

C++ エラー: LINK2005

  1. 問題の説明
    common.hは、すべての型エイリアスと構造体宣言を定義し、mass_diffusion.hheat_conduction.hmass_diffusion.hheat_conduction.hによって参照されます参照元man.cpp をコンパイルすると、リンク時にエラーが報告されました。この防御構文では、各ファイルには 1 つの init 関数のみが外部に公開されていますが、ファイル内に同じ名前の関数が存在するのはなぜですか。エラーは外部に報告されますか? LINK2005。我已经使用了#ifndef ... #define ... #endif ErrorMessage

  2. Visual Studio 2017 Compiles C ++エラー:
  3. LNK2005MASS_DIFFUSION.OBJ "VOID __CDECL Compute(class STD :: vector< structユーザー

    、class std :: allocator&lt; struct user&gt;&gt; std::vector<struct item ,class std::allocator<struct item >
    )」が heat_conduction.obj に定義されています。 関連コード

  4. //common.h
  5. #ifndef _COMMON_H#define _COMMON_H...

    構造体ユーザー;

    構造体項目;構造体関係;...
    typedef unsigned int _container_number_;
    typedef unsigned int _value_number_;
    。 ..
    typedef std::vector<user*> user_container;
    typedef std::vector<item*> item_container;
    #endif // !_COMMON_H
    ...

    //mass_diffusion.h

    #include "common.h"
    void init_md(user_container
    _ulist, item_container
    _ilist){...};
    void compute(user_container _ulist, item_container _ilist) {...};
    ...
    //heat_conduction.h
    # include "common.h"extern void init_hc(user_container _ulist, item_container
    _ilist);
    void compute(user_container _ulist, item_container _ilist);
    ...
    //heat_conduction.cpp
    #include "heat_詐欺duction .h"void init_hc(user_container _ulist, item_container
    _ilist){...};
    void compute(user_container _ulist, item_container _ilist) {...};
    ...
    //main. cpp
    #include "mass_diffusion.h"#include "heat_conduction.h"

高洛峰高洛峰2780日前656

全員に返信(1)返信します

  • PHPz

    PHPz2017-05-16 13:25:40

    それぞれのモジュールは同じファイルにリンクされているため、リンカーは .h で公開されているものを気にしません。解決策は、各モジュールを so または dll にコンパイルしてから呼び出すか、名前空間を使用することです

    返事
    0
  • キャンセル返事