Ich finde es momentan unmöglich, ein Auftreten von unendlicher Rekursion in meinem Code zu beheben.C++: Fehler beim Überladen von E/A-Operatoren
ich die folgenden Header haben, die die Proces
-Klasse definiert:
#pragma once
#include <iostream>
class Proces {
std::string name;
int maxWaitTime;
int timeToFinish;
int timeWaited;
int timeProcessed;
public:
Proces(std::string n, int mwt = 1, int ttf = 1) :name(n), maxWaitTime(mwt), timeToFinish(ttf), timeWaited(0), timeProcessed(0) {}
bool process(int a = 1) { timeProcessed += a; return isComplete(); }
bool isComplete() { return timeProcessed >= timeToFinish; }
bool wait(int a = 1) { timeWaited += a;return maxWaitReached(); }
bool maxWaitReached() { return maxWaitTime <= timeWaited; }
friend bool operator<(const Proces& a, const Proces& b);
friend bool operator>(const Proces& a, const Proces& b);
friend std::ostream &operator<<(std::ostream &output, const Proces& a);
friend std::istream &operator>>(std::istream &input, const Proces& a);
};
Dann wird für die Umsetzung der Betreiber, die ich habe:
#include "proces.h"
bool operator<(const Proces & a, const Proces & b)
{
if (a.timeWaited != b.timeWaited)
return a.timeWaited < b.timeWaited;
else
return a.maxWaitTime < b.maxWaitTime;
}
bool operator>(const Proces & a, const Proces & b)
{
return ! (a < b);
}
std::ostream & operator<<(std::ostream & output, const Proces & a)
{
output << a.naziv << " MWT:" << a.maxWaitTime << " TTC:" << a.timeToFinish << " WT:" << a.timeWaited << " TP:" << a.timeProcessed;
return output;
}
std::istream & operator>>(std::istream & input,Proces & a)
{
input >> a.name >> a.maxWaitTime >> a.timeToFinish;
a.timeWaited = 0;
a.timeProcessed = 0;
return input;
}
Dies führte zu zwei (soweit Ich weiß, ohne Bezug) Probleme:
- Verwendung der Ausgabe Betreiber führen t o die unendliche Rekursion geschieht
- Der Code selbst kann nicht des Eingangs Bediener ohne kommentieren, um die Durchführung kompiliert werden, da sie die Felder der Klasse behauptet, sind unzugänglich trotz ein Freund der Klasse zu sein
Schweregrad Beschreibung Projekt Datei Leitungsunterdrückung Status Fehler (aktiv) E0265 Mitglied "Proces :: Name" (in Zeile 4 von "[Projektpfad] \ proces.h" deklariert) ist nicht erreichbar aspdz2 [Projektpfad] \ proces. cpp
Hier ist die Hauptfunktion (die < und> Operatoren wie vorgesehen):
#include "proces.h"
int main() {
Proces a{ "Glorious prces",1,2 };
Proces b{ "Glorious prces2",2,2 };
if (a < b)std::cout << "A is lesser" << std::endl;
else std::cout << "B is lesser" << std::endl;
if (a > b)std::cout << "A is greater" << std::endl;
else std::cout << "B is greater" << std::endl;
b.wait(-1);
if (a < b)std::cout << "A is lesser" << std::endl;
else std::cout << "B is lesser" << std::endl;
//Infinite recursion happens here:
std::cout << b << std::endl;
}
std :: string name; Es ist nicht öffentlich. Aus diesem Grund erhalten Sie einen Fehler. –
In Header-Eingabe Operator hat const param, in der Umsetzung nicht. – Whatever
Sie haben einen Tippfehler in der 'operator >>' friend-Deklaration. Entferne das 'const' vom zweiten Argument. –