Fehlersuche

  • C++

  • kunks
  • 860 Aufrufe 2 Antworten

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

  • Fehlersuche

    So FSB'ler,

    stecke gerade mitten in der Klausurvorbereitung und habe ein kleines Problem, dass für die cracks von euch sicher trivial sein wird ;)

    Habe hier mal eine Ausschnitt einer Klausur vom letzten Semester:

    PHP-Quellcode

    1. Das folgende Quellfile wird gemäß C++-Sprachstandard compiliert und enthält 9 Fehler.
    2. Markieren Sie die fehlerhaften Stellen möglichst zeichengenau und schreiben Sie rechts danaben
    3. eine kurze stichwortartige Begründung!
    4. Logische oder Laufzeit-Fehler (z.B fehlende Variablen-Initialisierungen, nicht freigegebener
    5. Speicher) sind nicht gefragt.
    6. #include <string>
    7. #using namespace std;
    8. class A{
    9. int s;
    10. public:
    11. virtual int x;
    12. A(string s) {s = string(“abc”) +4;}
    13. };
    14. class B :: public A{
    15. int i;
    16. public:
    17. A f(){
    18. i=0;
    19. return this;
    20. }
    21. B(string s){}
    22. };
    23. void g(){
    24. B n[3];
    25. B* b = new A(“abc”);
    26. A m = n[0];
    27. m.f();
    28. }
    Alles anzeigen


    Und hier meine Lösungsvorschläge :eek:

    PHP-Quellcode

    1. #include <string>
    2. #using namespace std; //# falsch, da using namespace kein Präprozessorbefehl
    3. class A{
    4. int s;
    5. public:
    6. virtual int x;
    7. A(string s) {s = string(“abc”) +4;} //s kann nicht mit string initialisiert werden, da vom typ integer
    8. };
    9. class B :: public A{ //falscher Operator, muss : sein
    10. int i;
    11. public:
    12. A f(){
    13. i=0;
    14. return this;
    15. }
    16. B(string s){} //s passt nicht, weiß aber nicht warum :duck and cover:
    17. };
    18. void g(){
    19. B n[3];
    20. B* b = new A(“abc”); //b kann nicht während dem initialisieren erzeugt werden //("abc") geht nicht, warum??
    21. A m = n[0]; //Objekt m existiert nicht
    22. m.f(); //da kein Objekt m existiert kann die elementfunktion f auch nicht aufgerufen werden
    23. }
    Alles anzeigen


    Vllt. wäre jemand so freundlich und schaut sich das mal an und verbessert/berichtigt meine gefundenen Fehler ;)

    Danke

    MfG kunks
  • PHP-Quellcode

    1. #include <string>
    2. #using namespace std; //# falsch, da using namespace kein Präprozessorbefehl
    3. class A{
    4. int s;
    5. public:
    6. virtual int x; // virtual wird nur bei methoden benutzt, nicht bei membervariablen
    7. A(string s) {s = string(“abc”) +4;} //Hier wird nicht die membervariable sondern die variable verwendet die als Parameter übergeben wird, also string s. Ist nicht sinnvoll, aber möglich. Der Fehler liegt aber darin das man nicht string + 4 rechnen kann.
    8. };
    9. class B :: public A{ //falscher Operator, muss : sein
    10. int i;
    11. public:
    12. A f(){
    13. i=0;
    14. return this; // Es soll eine Konstante zurück gegeben werden, this ist aber ein Zeiger, außerdem muss ein typecast davor stehen return (A)*this; müsste gehen
    15. }
    16. B(string s){} //s passt, macht nur nichts
    17. };
    18. void g(){
    19. B n[3]; // Hier kommt es zu einem Fehler weil B keinen standardkonstruktor implementiert hat. A hat auch keinen Standardkonstruktor, also noch ein fehler
    20. B* b = new A(“abc”); //A ist die Oberklasse von B nicht umgekehrt. A = new B("abc"); würde gehen, andersrum nicht
    21. A m = n[0]; // kann nicht klappen weil es vorher schon fehler gab. das Array n wurde nicht angelegt wiel keine standardkonstruktoren vorhanden sind
    22. m.f(); //f ist eine methode der klasse b nicht der klasse A. Funktioniert also nicht
    23. }
    Alles anzeigen
    [SIZE="1"]i'm a signature virus. copy me into your signature to help me spread. - smart questions[/SIZE]