如何声明可通过多个头文件访问的对象
How do you declare a object that can be accessed through multiple header files?
我正在做一个项目,我正在清理我的代码并重新做代码,以便它更具可读性和易于调整。我遇到了一个问题,但是当我在头文件中创建一个对象时,编译器会向我抛出一个错误,说它已经定义;int假设。LNK-2005。
我尝试将对象创建为"extern",以便我可以从包含具有指定对象的文件的所有文件中访问对象。
// HeaderA.h
#include <Windows.h>
struct ProcessInfo
{
int ProcID;
HANDLE Handle;
};
这是下面的标题 B
// Header B starts here
// HeaderB.h
#include "HeaderA.h"
{
ProcessInfo pi;
pi.ProcID = 10;
struct Player
{
int health = 0;
float x, y, z;
int score = 0;
}
}
标题 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已经定义"。
您可以使用保护宏来避免多个定义,但这仅在只有一个翻译单元时才有效:
标题 A:
#ifndef HEADERA_H
#define HEADERA_H
// HeaderA.h
#include <Windows.h>
struct ProcessInfo
{
int ProcID;
HANDLE Handle;
};
#endif // HEADERA_H
标题 B:
#ifndef HEADERB_H
#define HEADERB_H
// Header B starts here
// HeaderB.h
#include "HeaderA.h"
{
ProcessInfo pi;
pi.ProcID = 10;
struct Player
{
int health = 0;
float x, y, z;
int score = 0;
};
}
#endif // HEADERB_H
标头 C 也是如此
在现代编译器中,您还可以在每个标头的开头添加指令"#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;
相关文章:
- 防止临时对象文件访问 MSVC 中的磁盘
- 内存映射文件访问非常慢
- 从多个文件访问静态全局 WinForm UI 对象
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 如何在Android中从本机编译的c ++二进制文件访问相机
- 如何:监视Windows中另一个进程的文件访问?
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 执行C 代码时快速频繁的文件访问
- 使用TDD时隐藏文件访问实现详细信息
- 从C文件访问C 类成员功能
- 从另一个CPP文件访问Form1的文本框,Visual C 2010
- 在所有CPP文件中使用一个Globe变量.如果CPP文件的一个类更改该值,我想从另一个类CPP文件访问它
- 如何从C 文件访问$(target_arch)
- 系统访问出界异常,尝试从flatbuffer的二进制文件访问"LengthofTable"
- 如何声明可通过多个头文件访问的对象
- 使用二进制文件访问违规读取位置
- 哪种类型的文件访问使用
- 在其他源文件中没有通用的头文件访问功能
- 文件访问不起作用
- Windows 8 应用商店应用程序C++文件访问