Problem mit Hausaufgabe OOP

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Hausaufgabe OOP

    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

    Quellcode

    1. int main(int argc, char *argv[])
    2. {
    3. Schaltung zaehler;
    4. And x;
    5. zaehler.add (& x);
    6. zaehler.add (& x);
    7. zaehler.verbinde( &zaehler.s[0].ausgang.[0],& zaehler.s[1].eingang[0]); //Hierfür ist die Fehlermeldung
    8. system("PAUSE");
    9. return EXIT_SUCCESS;


    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

    1. //Abstrakte Oberklasse zu Schaltnetz und Schaltwerk
    2. class Schaltelement
    3. {public:
    4. vector <int> ausgang; // fuer die Ausgaenge
    5. vector <int> eingang; // fuer die Eingaenge
    6. virtual void takt( ) = 0; // Funktion zum Takten der Schaltwerke
    7. virtual void logfkt( ) = 0; // Funktion zum Berechnen der Schaltnetze
    8. friend ostream& operator<< ( ostream&, Schaltelement* );
    9. class Verbindung // fuer die einzelne Verbindung
    10. { int *von, *zu;
    11. public:
    12. Verbindung ( int & v, int & z );
    13. // Konstruktor mit Initialisierungsliste
    14. void uebernehmen( );
    15. // Wert des Ausgangs von als Wert fuer den Eingang zu uebernehmen
    16. };
    17. Verbindung::Verbindung( int & v, int & z)
    18. {
    19. *von=v;
    20. *zu=z;
    21. }
    22. void Verbindung::uebernehmen()
    23. {
    24. // *z.eingang(0)=*v.ausgang(0);
    25. }
    26. //Abstrakte Oberklasse zu Schaltnetzen wie And, Or, Nand,
    27. //ALU, (De)Multiplexer usw.
    28. class Schaltnetz: public Schaltelement
    29. {protected:
    30. virtual void takt() { } // Keine Wirkung bei Schaltnetzen
    31. virtual void logfkt( )=0;
    32. public:
    33. Schaltnetz() { /*netztiefe++;*/ }
    34. };
    35. // Abstrakte Oberklasse zu getakteten Schaltwerken
    36. // wie Flipflop, Register, Zaehler
    37. class Schaltwerk: public Schaltelement
    38. {protected:
    39. virtual void takt()=0;
    40. virtual void logfkt( ) { } // Keine Wirkung bei Schaltwerken
    41. };
    42. // Von Schaltnetz abgeleitete konkrete Klasse And
    43. class And: public Schaltnetz // Fuer AND-Gatter mit n Eingaengen
    44. {public:
    45. And( int n=2 ) // Konstruktor, n = Anzahl der Eingaenge
    46. { for ( int i=0; i<n; i++ ) eingang.push_back( high ); // Alle Eingaenge=1
    47. ausgang.push_back( high );
    48. }
    49. void logfkt ( ) // Die Funktion des And-Gatters
    50. { int h = high;
    51. for ( int i=0; i<eingang.size(); i++ ) h = h && eingang[i];
    52. ausgang[0] = h;
    53. }
    54. };
    55. // Von Schaltwerk abgeleitete konkrete Klasse Flipflop
    56. class Flipflop: public Schaltwerk
    57. {
    58. public:
    59. Flipflop( ) // Konstruktor
    60. {
    61. eingang.push_back( low );
    62. eingang.push_back( low );
    63. eingang.push_back( low );
    64. ausgang.push_back( low );
    65. ausgang.push_back( high ); //komplementärer ausgang
    66. }
    67. void takt ( ) // Die Funktion des Flipflops
    68. {
    69. ausgang[0]=eingang[0]^ausgang[0];
    70. ausgang[1]=!ausgang[0];
    71. }
    72. };
    73. class Schaltung
    74. {public:
    75. vector <Verbindung> v; // Verbindungen von <-> zu
    76. vector <Schaltelement*> s; // Schaltelemente
    77. public:
    78. void add ( Schaltelement * se );
    79. void verbinde ( int & von, int & zu );
    80. // Erzeugt ein neues Verbindung-Objekt und fuegt es an v an.
    81. void berechne ( );
    82. // Ausgangswerte übernehmen
    83. // Schaltnetze wiederholt (bis zur Schaltnetztiefe) neu berechnen
    84. // Ausgangswerte übernehmen
    85. // Schaltwerke takten
    86. };
    87. void Schaltung::add (Schaltelement * se)
    88. {
    89. s.push_back (se);
    90. }
    91. void Schaltung::verbinde ( int & von, int & zu )
    92. {
    93. v.push_back (Verbindung(von,zu));
    94. }
    Alles anzeigen