2016-11-07 12 views
0

既に定義されているヘッダファイルを他のヘッダファイルから定義解除することはできますか?定義済みのヘッダファイル/ C++の定義を解除する

私は別のクラスで作業しています。プライベートな部分をpublicに変更するには、あるクラスを定義解除する必要があります。

プライベートクラスをパブリッククラスに変更するのは一般的ではありませんが、本当に私を助けることができます。

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

*「公的なクラスにプライベートを変更するのは一般的ではありませんが、本当に私を助けることができます。」*開発者がそれを考えるたびに、子猫が死ぬ。代わりに、この "解決"の問題について質問してみませんか? – StoryTeller

+0

この縫い目は[XYProblem](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように...これを行うことで何を達成しようとしていますか? – Garf365

+0

@ Garf365私はポケガメに取り組んでいます。ゲームには複数のAIがあり、チップを「ハックする」ことができるのかどうか疑問に思った。言い換えれば、チップの量を含むプライベート変数を変更するだけです。 –

答えて

3

最初に、プリプロセッサ技術を使用して、コンパイラに送信されたコードからステートメントを削除することはできません。

第2に、C++では#defineprivatepublicとすることはできません。 C++ 11 17.6.4.3.1マクロ名[macro.names]

翻訳単位キーワードに字句 同じ名前を#defineしたり#undefのものではありません。

so do notこれを行う。

この状況で実際にできることは、クラスを再入力することだけです。

+0

聖なる基準がそれを世話したことを知らなかった。私は本物の安堵を感じる。 – StoryTeller

+0

実際に動作します。このヘッダーを最初にインクルードするとうまくいきますが、catch.hが最初にコンパイルされたときにキャッチが行われます。 –

+0

@ArmandLambrechts、あなたのコンパイラは非標準です。新しいコードではコードが壊れてしまい、それも良いことです。 – StoryTeller

0

クラスが定義された後にクラスを再定義する方法はありません。あなたがしようとすると、例えば

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

が前であってもpublicprivateを再定義し、これらの線に沿って、エラー・メッセージが表示されます

は危険であり、このクラスの契約に違反します。

がなぜと思われるのかと考えて、できるだけクラスをリファクタリングする必要があります。

+0

"危険です"、あなたは私にそれを教えています。それは許可されていません。 – Bathsheba

+0

@Bathshebaこれは、既存のソフトウェアをハックする試みのように思えます。 "標準で許可されていません"は無関係です。もちろん、これを不正行為にすることはむしろ非倫理的です。私は不正行為を意味しているわけではありません。 – hyde

関連する問題