2016-11-07 3 views
0

Ist es möglich, eine Header-Datei, die bereits definiert ist, aus einer anderen Header-Datei zu definieren?Definieren Sie eine definierte Header-Datei/C++

Ich arbeite mit verschiedenen Klassen und ich muss eine bestimmte Klasse aufheben, um den privaten Teil für die Öffentlichkeit zu ändern.

Ich weiß, es ist nicht üblich, eine private in eine öffentliche Klasse zu ändern, aber es könnte mir wirklich helfen.

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

* "Ich weiß, dass es nicht üblich ist, eine private in eine öffentliche Klasse zu ändern, aber es könnte mir wirklich helfen." * Jedes Mal, wenn ein Entwickler das denkt, stirbt ein Kätzchen. Warum fragst du nicht nach dem Problem, das "löst" stattdessen? – StoryTeller

+0

Das scheint wie ein [XYProblem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) ... was versuchst du damit zu erreichen? – Garf365

+0

@ Garf365 Ich arbeite an einem Pokerspiel. Es gibt mehrere KIs im Spiel und ich fragte mich, ob es möglich sein könnte, die Chips zu "hacken". Mit anderen Worten ändern Sie einfach die private Variable, die die Menge an Chips enthält. –

Antwort

3

Erstens gibt es keine Präprozessor Techniken, die Sie, dass Aussagen aus dem Code entfernen verwenden können, die an den Compiler abgegeben wird.

Zweitens erlaubt C++ nicht zu #defineprivate wie public. C++ 11 17.6.4.3.1 Makronamen [macro.names]

Eine Übersetzungseinheit wird #define oder #undef Namen nicht lexikalisch auf Schlüsselwörter identisch.

Also tun nicht dies tun.

Das einzige, was Sie in dieser Situation wirklich tun können, ist, die Klasse erneut einzugeben.

+0

Wusste nicht, dass der heilige Standard dafür sorgte. Ich fühle echte Erleichterung. – StoryTeller

+0

Es funktioniert tatsächlich. Wenn ich diesen Header zuerst hinzufüge, funktioniert es gut, aber der Haken ist, wenn player.h zuerst kompiliert wird. –

+0

@ArmandLambrechts, Ihr Compiler ist nicht Standard. Auf einem neueren wird dein Code kaputt gehen, und es ist auch eine gute Sache. – StoryTeller

0

Es gibt keine Möglichkeit, eine definierte Klasse neu zu definieren. Wenn Sie versuchen, erhalten Sie eine Fehlermeldung in dieser Richtung erhalten

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

Auch private in public vor Neudefinition, z.B.

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

ist gefährlich und verletzt den Vertrag für diese Klasse.

Sie sollten lieber darüber nachdenken, warum diese notwendig scheint, und Refactor die Klasse wenn möglich.

+0

"ist gefährlich", du sagst es mir. Es ist nicht erlaubt. – Bathsheba

+0

@Bathsheba Dies scheint ein Versuch zu sein, existierende Software zu hacken, was an und für sich gut ist. "Vom Standard nicht erlaubt" ist irrelevant. Natürlich ist es ziemlich unethisch, das zu tun, um zu betrügen. Ich unterstelle nicht, dass Betrug gut ist. – hyde

Verwandte Themen