Ich schrieb eine Klasse, die Qubit darstellen. Also Objekt hat nur einen Wert, Zustand, mit 0 oder 1 (bool). Um benötigte Berechnungen durchzuführen, habe ich Operatoren wie +, *,^überladen. Es scheint, dass alles mit + und * in Ordnung ist, auch mit ^, aber nur, wenn ich es nicht mit dem std :: ostream-Operator verwenden werde.XOR-Operator mit Std :: Ostream-Operator
Qubit x5, x6;
cout << x5^x6; !ERROR!
aber mit
Qubit x5, x6;
Qubit z = x5^x6;
cout << z;
es arbeiten wird. Mein std: operator
std::ostream & operator <<(std::ostream & os, const Qubit & qubit)
{
os << qubit.GetState();
return os;
}
und mein XOR-Operator
Qubit & Qubit::operator ^(const Qubit & qubit)
{
Qubit *q = new Qubit;
((this->state == 1 && qubit.state == 0) ||
(this->state == 0 && qubit.state == 1)) ? q->SetState(1) : q->SetState(0);
return *q;
}
Kehren Sie zu Ihrem C++ - Buch zurück, und lesen Sie das Kapitel zur Vorrangstellung des Operators. –
http://en.cppreference.com/w/cpp/language/operator_precedence –
Sie haben ein Speicherleck in Ihrer 'operator ^' Funktion. Lesen Sie auch mehr über [Operatorüberladung] (http://en.cppreference.com/w/cpp/language/operators), insbesondere den kanonischen [binary arithmetic operators section] (http://en.cppreference.com/w/cpp/Sprache/Operatoren # Binary_arithmetic_operators). Beachten Sie das Beispiel, in dem Sie aufgefordert werden, * durch Wert * und nicht durch Verweis zurückzugeben. –