取消定义已定义的头文件/ C ++

时间:2016-11-07 09:00:08

标签: c++ visual-c++

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

我正在与不同的班级合作,我需要取消定义某个班级才能将私人部分更改为公开。

我知道将私人课程改为公共课程并不常见,但它确实可以帮助我。

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

2 个答案:

答案 0 :(得分:3)

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

其次,C ++不允许您#define private作为public。 C ++ 11 17.6.4.3.1宏名[macro.names]

  

翻译单位不得在词汇上定义#define或#undef   与关键字相同。

所以不要这样做。

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

答案 1 :(得分:0)

一旦定义了类,就无法重新定义类。如果您尝试,将会在这些行中收到错误消息

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

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

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

很危险,违反了本课程的合同。

您应该考虑为什么似乎必要,并在可能的情况下重构该类。