请在这里给我一个提示:
class UIClass
{
public:
UIClass::UIClass();
};
#ifndef __PLATFORM__
#define __PLATFORM__
UIClass Platform;
#else
extern UIClass Platform;
#endif
我将这两次包括在内并得到:
您可能会猜到,这个想法只定义了一次Platform。为什么
#ifndef
或#define
失败?我该如何解决? 最佳答案
#define
是本地翻译单元,但定义不是。您需要在头文件中放入extern UIClass Platform;
,在实现文件中放入UIClass Platform;
。
如果您确实想在 header 中包含定义,则可以使用一些模板类魔术:
namespace detail {
// a template prevents multiple definitions
template<bool = true>
class def_once_platform {
static UIClass Platform;
};
// define instance
template<bool _> def_once_platform<_> def_once_platform<_>::Platform;
// force instantiation
template def_once_platform<> def_once_platform<>::Platform;
}
// get reference
UIClass& Platform = detail::def_once_platform<>::Platform;
关于c++ - 为什么 “already defined”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20955287/