是否可以从另一个头文件中取消定义已定义的头文件?
我正在与不同的班级合作,我需要取消定义某个班级才能将私人部分更改为公开。
我知道将私人课程改为公共课程并不常见,但它确实可以帮助我。
#undef "player.h"
#define private public
#include "player.h"
#undef private
答案 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
很危险,违反了本课程的合同。
您应该考虑为什么似乎必要,并在可能的情况下重构该类。