問題の説明
common.hは、すべての型エイリアスと構造体宣言を定義し、mass_diffusion.hとheat_conduction.h、mass_diffusion.hとheat_conduction.hによって参照されます参照元man.cpp をコンパイルすると、リンク時にエラーが報告されました。この防御構文では、各ファイルには 1 つの init 関数のみが外部に公開されていますが、ファイル内に同じ名前の関数が存在するのはなぜですか。エラーは外部に報告されますか? LINK2005
。我已经使用了#ifndef ... #define ... #endif
ErrorMessage
、class std :: allocator&lt; struct user&gt;&gt; std::vector<struct item ,class std::allocator<struct item >
)」が heat_conduction.obj に定義されています。
関連コード
#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"
PHPz2017-05-16 13:25:40
それぞれのモジュールは同じファイルにリンクされているため、リンカーは .h で公開されているものを気にしません。解決策は、各モジュールを so または dll にコンパイルしてから呼び出すか、名前空間を使用することです