【发布时间】:2013-02-01 09:23:20
【问题描述】:
可能重复:
Why does this not prevent multiple function declarations?
全球.h
#ifndef Global_h
#define Global_h
#include <iostream>
unsigned char exitStatus;
#endif
OutputHandler.h
#ifndef OutputHandler_h
#define OutputHandler_h
#include "Global.h"
class OutputHandler {
private:
static bool instanceExists;
// more code
#endif
根.h
#ifndef Root_h
#define Root_h
// declarations
OutputHandler *output;
#endif
根.cpp
#include "Root.h"
// gets instance of OutputHandler
// more code
我收到关于 exitStatus、static bool instanceExists 和 static class output 已由 Root.obj 在 OutputHandler.obj 中。我认为问题在于在 Root.h 和 OutputHandler.cpp 中都包含头文件 OutputHandler.h。有谁知道如何解决这个问题或如何更好地组织头文件?
【问题讨论】:
-
Q 的答案详细解释了原因。简而言之,您不应该在头文件中定义对象,然后将该头包含在多个 TU 中。它违反了 ODR。
标签: c++