取消定义一个已定义的头文件

visual Undefine a defined header file / C++

本文关键字:定义 文件 一个 取消      更新时间:2023-10-16

是否可以从另一个头文件中取消定义已经定义的头文件?

我正在处理不同的类,我需要取消定义一个特定的类,以便将私有部分更改为公共部分。

我知道将私有类更改为公共类是不常见的,但它确实可以帮助我。

#undef "player.h"
#define private public
#include "player.h"
#undef private

首先,您无法使用预处理器技术从提交给编译器的代码中删除语句。

其次,c++不允许将#define private作为public。c++ 11 17.6.4.3.1宏名称[Macro .names]

翻译单元不能在词法上使用#define或#undef names与关键字相同。

所以不要这样做。

在这种情况下你唯一能做的就是重新输入类

类一旦定义,就没有办法重新定义了。如果您尝试这样做,您将得到以下一行的错误消息

   error: redefinition of 'class player'
     class player {
           ^

甚至之前将private重新定义为public,例如

#define private public
#include "player.h"
#undef private

是危险的,并且违反了这个类的契约。

你应该考虑为什么这个看起来是必要的,如果可能的话重构这个类。