Hallo Leute,
ich habe die Aufgabe, einen 4 Bit Synchronzähler in C++ zu programmieren. Dafür haben wir vom Prof Programmfragmente vorgegeben bekommen und sollen das fertig programmieren. Aber ich komm einfach nicht weiter und langsam wird die Zeit knapp. Ich hoffe mir kann jemand helfen.
Mit dieser main
bekomme ich ich die Meldung
...Schaltung::s' is private within this context
Dann habe ich das erst mal Public gemacht, obwohl das so in der Vorgabe nicht gedacht ist. (Ich weiß allerdings auch nicht wie ich sonst die Verbindungspunkte für die Schaltelemente angeben soll...) Jetzt bleibt noch die Felermeldung
`ausgang' has not been declared
Aber in der Klasse Schaltelement gibt es ja den Vektor ausgang (mit eingang natürlich das gleiche) Aber warum greift er darauf mit den angegebenen Parametern nicht zu? Und gibt es eine andere Möglichkeit, so dass ich die Vektoren wieder Private machen kann?
Bin dankbar für jeden Tipp
edit: Habe vergessen zu sagen dass ich Dev C++ benutze.
Hier noch die zugehörigen Klassen: (Sind noch nicht richtig fertig und ich erwarte auch nicht dass sich jemand das alles durchliest, aber ich denke ohne die ist das wohl nicht nachvollziehbar...)
Alles anzeigen
ich habe die Aufgabe, einen 4 Bit Synchronzähler in C++ zu programmieren. Dafür haben wir vom Prof Programmfragmente vorgegeben bekommen und sollen das fertig programmieren. Aber ich komm einfach nicht weiter und langsam wird die Zeit knapp. Ich hoffe mir kann jemand helfen.
Mit dieser main
bekomme ich ich die Meldung
...Schaltung::s' is private within this context
Dann habe ich das erst mal Public gemacht, obwohl das so in der Vorgabe nicht gedacht ist. (Ich weiß allerdings auch nicht wie ich sonst die Verbindungspunkte für die Schaltelemente angeben soll...) Jetzt bleibt noch die Felermeldung
`ausgang' has not been declared
Aber in der Klasse Schaltelement gibt es ja den Vektor ausgang (mit eingang natürlich das gleiche) Aber warum greift er darauf mit den angegebenen Parametern nicht zu? Und gibt es eine andere Möglichkeit, so dass ich die Vektoren wieder Private machen kann?
Bin dankbar für jeden Tipp
edit: Habe vergessen zu sagen dass ich Dev C++ benutze.
Hier noch die zugehörigen Klassen: (Sind noch nicht richtig fertig und ich erwarte auch nicht dass sich jemand das alles durchliest, aber ich denke ohne die ist das wohl nicht nachvollziehbar...)
Quellcode
- //Abstrakte Oberklasse zu Schaltnetz und Schaltwerk
- class Schaltelement
- {public:
- vector <int> ausgang; // fuer die Ausgaenge
- vector <int> eingang; // fuer die Eingaenge
- virtual void takt( ) = 0; // Funktion zum Takten der Schaltwerke
- virtual void logfkt( ) = 0; // Funktion zum Berechnen der Schaltnetze
- friend ostream& operator<< ( ostream&, Schaltelement* );
- class Verbindung // fuer die einzelne Verbindung
- { int *von, *zu;
- public:
- Verbindung ( int & v, int & z );
- // Konstruktor mit Initialisierungsliste
- void uebernehmen( );
- // Wert des Ausgangs von als Wert fuer den Eingang zu uebernehmen
- };
- Verbindung::Verbindung( int & v, int & z)
- {
- *von=v;
- *zu=z;
- }
- void Verbindung::uebernehmen()
- {
- // *z.eingang(0)=*v.ausgang(0);
- }
- //Abstrakte Oberklasse zu Schaltnetzen wie And, Or, Nand,
- //ALU, (De)Multiplexer usw.
- class Schaltnetz: public Schaltelement
- {protected:
- virtual void takt() { } // Keine Wirkung bei Schaltnetzen
- virtual void logfkt( )=0;
- public:
- Schaltnetz() { /*netztiefe++;*/ }
- };
- // Abstrakte Oberklasse zu getakteten Schaltwerken
- // wie Flipflop, Register, Zaehler
- class Schaltwerk: public Schaltelement
- {protected:
- virtual void takt()=0;
- virtual void logfkt( ) { } // Keine Wirkung bei Schaltwerken
- };
- // Von Schaltnetz abgeleitete konkrete Klasse And
- class And: public Schaltnetz // Fuer AND-Gatter mit n Eingaengen
- {public:
- And( int n=2 ) // Konstruktor, n = Anzahl der Eingaenge
- { for ( int i=0; i<n; i++ ) eingang.push_back( high ); // Alle Eingaenge=1
- ausgang.push_back( high );
- }
- void logfkt ( ) // Die Funktion des And-Gatters
- { int h = high;
- for ( int i=0; i<eingang.size(); i++ ) h = h && eingang[i];
- ausgang[0] = h;
- }
- };
- // Von Schaltwerk abgeleitete konkrete Klasse Flipflop
- class Flipflop: public Schaltwerk
- {
- public:
- Flipflop( ) // Konstruktor
- {
- eingang.push_back( low );
- eingang.push_back( low );
- eingang.push_back( low );
- ausgang.push_back( low );
- ausgang.push_back( high ); //komplementärer ausgang
- }
- void takt ( ) // Die Funktion des Flipflops
- {
- ausgang[0]=eingang[0]^ausgang[0];
- ausgang[1]=!ausgang[0];
- }
- };
- class Schaltung
- {public:
- vector <Verbindung> v; // Verbindungen von <-> zu
- vector <Schaltelement*> s; // Schaltelemente
- public:
- void add ( Schaltelement * se );
- void verbinde ( int & von, int & zu );
- // Erzeugt ein neues Verbindung-Objekt und fuegt es an v an.
- void berechne ( );
- // Ausgangswerte übernehmen
- // Schaltnetze wiederholt (bis zur Schaltnetztiefe) neu berechnen
- // Ausgangswerte übernehmen
- // Schaltwerke takten
- };
- void Schaltung::add (Schaltelement * se)
- {
- s.push_back (se);
- }
- void Schaltung::verbinde ( int & von, int & zu )
- {
- v.push_back (Verbindung(von,zu));
- }