C++ Warum bin ich nicht in der Lage zu verwenden, der eine enum-Global definiert, die außerhalb der Klasse deklariert wurde?

Recht jetzt mein Projekt hat zwei Klassen und einer main. Da die beiden Klassen Erben von einander, Sie sind sowohl mit der forward-Deklaration. In das erste Objekt, direkt unter die #include-Anweisung, Initialisiere ich zwei Enumerationen, die vor der Klasse definition. Kann ich mit beiden Enumerationen, die nur fine in dieser Klasse. Allerdings, wenn ich versuche, diese zu benutzen, Enumerationen, die in der anderen Klasse, die erbt von der ersten ein, bekomme ich eine Fehlermeldung besagt, dass die enum-nicht deklariert wurde. Wenn ich versuche, neu zu definieren, die enum in der zweiten Klasse, ich bekomme eine Neudefinition Fehler.

Ich habe sogar versucht, mit einem trick, den ich nur Lesen Sie über, und setzen jedes enum in einem eigenen Namensraum, das ist nicht nichts ändern.

Hier ein Beispiel:

#ifndef CLASSONE_H
#define CLASSONE_H

namespace Player
{
    enum Enum
    {
        One,
        Two,
    };
}

#endif

Anschließend in die zweite Klasse, ich Versuch zu verwenden, die enum deklariert früher:

void AddPlayer(Player::Enum playerNumber);

und erhalten stattdessen eine Fehlermeldung, die sagen, 'Player' wurde nicht deklariert.

Könnten Sie uns zeigen, einige einfache code veranschaulicht dies?
Ist die zweite Klasse #inklusive "Classone.h"?
Ja, und classone ist einschließlich classtwo.
Warum ist classone einschließlich classtwo? Der springende Punkt bei der #ifndef CLASSONE_H ist zu verhindern, dass eine Art rekursive Inklusion. Die Basisklasse header enthalten sein sollte, in der abgeleiteten Klasse die header, da die abgeleitete Klasse muss wissen, was es ist abgeleitet aus. Die Basisklasse nicht darum kümmert, wer leitet aus dieser, so dass Sie nicht brauchen, um die abgeleitete Klasse header der Basis-header-Klasse.
Sie müssen zeigen, alle Ihre header-Dateien. Dieses hin und her in Englisch ist nicht hilfreich. Das ist, warum wir haben eine Sprache, die speziell für Sie, ist nicht mehrdeutig. Zeigen Sie den code für alle betroffenen header-Dateien.

InformationsquelleAutor Roderick | 2010-05-22

Schreibe einen Kommentar