Ich habe ein kleines Projekt, ich mache auf C++. Das Projekt erfordert mich eine Template-Klasse zu schreiben, sagen läßt Klasse A. Ich habe einige Anforderungen an A, unter ihnen:Cast-Klasse zu Template-Klasse
- Keine dynamische Zuordnung in A-Implementierung erlaubt.
- A enthält einen Parameter vom Typ T (kein Zeiger, also kein "Neu").
- A kann leer sein (d. H. Es wurde nicht initialisiert).
Man kann A in den folgenden Weisen initialisieren:
A<int> a; A<int> a(5); A<int> a = 5; A<int> a = Empty;
ich kein Problem mit den drei ersten Arten der Initialisierung haben, aber ich bin ein wenig ratlos in Bezug auf die letzte Option.
Empty ist eine Klasse, die ich definieren sollte, wie ich will. Meine ursprüngliche Richtung war eine (leere) Klasse EmptyClass zu erstellen:
class EmptyClass {};
statisch ein Objekt instanziiert Leere genannt (so dass jeder der Klasse A verwendet wird, auch leer wissen):
static EmptyClass Empty;
und das ist es. Anscheinend funktioniert es nicht.
Die gesamte (relevante) Template-Deklaration:
class A{
private:
T _Value;
bool _empty;
public:
A();
A(const T value);
A(const EmptyClass none);
A(const A& opt);
A(const EmptyClass & none);
//Checks if the object is empty
const bool isEmpty() const;
//Destructor
~Optional();
A<T>& operator=(const EmptyClass& rhs);
A<T>& operator=(const A<T>& rhs);
};
Zeit einen Fehler in dieser Zeile Ich erhalte:
A<int> optionalInt = Empty
Der Fehler ist:
error: invalid conversion from 'EmptyClass (*)()' to 'int' [-fpermissive]
ich bin darf nur den C++ 98-Standard verwenden. Möchte irgendeine Richtung für die Lösung dieses Problems bekommen.
Danke!
Sie müssen die gesamte Vorlage Klassendeklaration zeigen. –
Vielleicht möchten Sie etwas über [Boost optional] (http://www.boost.org/doc/libs/1_61_0/libs/optional/doc/html/index.html) erfahren (welches in C++ eingeführt wird) 17 Standard als ['std :: optional '] (http://en.cppreference.com/w/cpp/utility/optional)). Wenn Sie das nicht verwenden möchten, können Sie es zumindest als Referenz für die Erstellung Ihrer eigenen optionalen Klasse verwenden. –
Für das Problem, über das Sie nachfragen, bearbeiten Sie bitte die Frage, um ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) einzuschließen, oder zeigen Sie uns mindestens die Erklärung von "leer". –