C++ 如何声明可以通过多个头文件访问的对象?
我正在做一个项目,我正在清理我的代码并重新编写代码,这样它更可读,更容易调整。我有一个问题,当我在头文件中创建一个对象时,编译器抛出一个错误,说它已经定义了;假定为int。LNK-2005 我尝试将对象创建为“extern”,以便可以从包含指定对象的文件的所有文件中访问对象C++ 如何声明可以通过多个头文件访问的对象?,c++,header,C++,Header,我正在做一个项目,我正在清理我的代码并重新编写代码,这样它更可读,更容易调整。我有一个问题,当我在头文件中创建一个对象时,编译器抛出一个错误,说它已经定义了;假定为int。LNK-2005 我尝试将对象创建为“extern”,以便可以从包含指定对象的文件的所有文件中访问对象 // HeaderA.h #include <Windows.h> struct ProcessInfo { int ProcID; HANDLE Hand
// HeaderA.h
#include <Windows.h>
struct ProcessInfo
{
int ProcID;
HANDLE Handle;
};
标题C
此文件应该能够使用头B的对象“pi”
//HeaderC.h
#include "HeaderB.h"
// creating object from headerB
Player player;
// is there a way so I can use the object declared in HeaderB in HeaderC?
// like so
pi.ProcID = 45;
我希望能够通过多个文件(如HeaderB-HeaderZ)使用头B中创建的对象。A-Z;多个标题,但在编译时,我已定义了错误LNK2005。您可以使用guard宏来避免多个定义,但这仅在您只有一个翻译单元时有效: 标题A:
#ifndef HEADERA_H
#define HEADERA_H
// HeaderA.h
#include <Windows.h>
struct ProcessInfo
{
int ProcID;
HANDLE Handle;
};
#endif // HEADERA_H
校长也一样
在现代编译器中,还可以在每个头的开头添加一次指令pragma
但如果您需要在不同的cpp文件转换单元中使用一个全局变量,您可以使用static关键字,如果您希望每个转换单元都有自己的变量实例
static ProcessInfo pi;
或者,您希望在翻译单位之间共享值,您可以在标题中使用extern关键字,并在其中一个cpp文件中定义变量
#ifndef HEADERB_H
#define HEADERB_H
#include "HeaderA.h"
extern ProcessInfo pi;
#endif // HEADERB_H
单位b.cpp
#include "HeaderB.h"
ProcessInfo pi;
pi.ProcID = 10;
所以基本上把对象声明放在一个单独的全局头文件中?每个需要对象的头文件都只包含头文件,它位于?是的,例如,加上一个源文件,对象实际上是在其中定义的,而不仅仅是声明的。
#ifndef HEADERB_H
#define HEADERB_H
#include "HeaderA.h"
extern ProcessInfo pi;
#endif // HEADERB_H
#include "HeaderB.h"
ProcessInfo pi;
pi.ProcID = 10;