Problembeschreibung
common.h definiert alle Typaliase und Strukturdeklarationen und wird von mass_diffusion.h und heat_conduction.h, mass_diffusion.h und heat_conduction.h referenziert Referenziert von man.cpp, und dann erfolgreich kompiliert, wurde beim Verknüpfen ein Fehler gemeldetLINK2005
。我已经使用了#ifndef ... #define ... #endif
Diese defensive Syntax hat nur eine Init-Funktion, die nach außen offengelegt wird. Obwohl es Funktionen mit demselben Namen in der Datei gibt, warum werden sie nicht offengelegt? nach außen? Wird ein Fehler gemeldet?
Fehlermeldung
Visual Studio 2017 kompiliert C++-Fehler: LNK2005 mass_diffusion.obj „void __cdecl compute(class std::vector<struct user ,class std::allocator<struct user > > ,class std::vector<struct item ,class std::allocator<struct item > >
Zugehörige Codes
//common.h#ifndef _COMMON_H
#define _COMMON_H
...
struct user;
struct item;
struct relation;
...
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"
extern void init_md(user_container
, item_container);void compute(user_container
_ulist, item_container _ilist);...
//mass_diffusion.cpp#include "mass_diffusion.h" # Integrieren Sie "Common.h"
extern void init_hc (user_container
_ulist, item_container _ilist); 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“
本来就会报错,你各个模块都链接到同一个文件里,链接器一看那么多符号都一个名字自然就gg了,.h里面暴露什么链接器不会管的,解决方法是各个模块独立编译成so或者dll,然后再调用,或者用命名空间