Objektorientiert?!?!



  • Dein Code ist irgendwie.. sagen wir komisch.
    Wenns um ein Autorennen geht wäre meine erste Idee
    das das Auto eine Klasse ist.

    Diese Klasse sollte die Coordinaten des Autos haben
    und eine Methode zum Zeichnen.

    Mehr kann ich nicht sagen, da ich nciht genau weis
    was du vorhast oder was am Ende rauskommen soll.



  • was ist denn prozetural?
    Habe ich noch nie gehört.

    Und in wie fern ist mein code komisch. Bzw wie kann ich ihn besser machen?

    Ich versuche es trotzdem mal wie du gesagt hast...

    bsp aus meinem buch.

    class CBuch
    {
        public:
            char Autor[100];
            char Titel[100];
    
            void Ausgabe()
            {
                cout<<Autor<<endl;
                cout<<Titel<<endl;
            }
    } einBuch;
    

    Für mein progg dann:

    class Auto
    {
        public:
            gotoxy(a1,3);
    
            void Auto()
            {
                printf("\"O==o_");
            }
    } autorennen;
    

    dann zu dem was mein prog machen soll/Macht...

    In der Konsole wird eine Rennstrecke gezeichnet.
    Auf der rennstrecke sind 2 autos.

    durch abwechselndes drücken von a und s bewegt sich auto1 vorwärts.
    durch abwechselndes drücken von l und k bewegt sich auto2 vorwärts.

    wer als erstes im Ziel ist hat gewonnen.



  • Zu verbessern wäre:

    1. gotoxy(a1,3); muß in einer Funktion stehen, nicht in der Klasse.

    2. Normalerweise trennt man die Klassendefinition und Erzeugung einer Instanz:

    class Buch
    {
        // irgendwas
    ];
    
    Buch einBuch;
    

    Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.

    3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.

    4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).

    5. Der Konstruktor (in deinem Beispiel Auto()) hat keinen Rückgabetyp (auch nicht void).

    6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.

    Edit: 7. Und zu deinem ursprünglichen Quelltext: Der Rückgabetyp von main ist int, nicht void.

    Edit: 8. Ist mit gerade erst aufgefallen, daß in deinem urpsürnglichen Quelltext gotos drin sind. Hatte ich beim ersten Überfliegen nicht gesehen. Sonst hätte ich es möglicherweise unterlassen dazu zu kommentieren. Mit Quelltext der gotos enthält gebe ich mich normalerweise nicht ab. Ein goto ist ein guter Grund für ein lebenslanges Compiler-Verbot. Dafür gibt es wirklich keine Entschuldigung.



  • Deine gotos sind echt überflüssig. Statt goto ENDE; kannst du break nehmen und statt gogo ANFANG; kannst du eine Schleife machen, die dann mittels break beendet wird.

    do
    {
         Startbildschirm aufbauen
    
         do
         {
             Spiel laufen lassen
    
         } while (SpielZuende == false);
    
         Neues Spiel?
    
    } while (NeuesSpiel == true);
    


  • Ok. Ich werde die gotos ersetzen.
    Aber was ist so schlimm daran. das verstehe ich gernicht.
    Was machen die so schlimmes?





  • Z2 schrieb:

    Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.

    was sind globale veriablen. und wieso sind die böse?

    Z2 schrieb:

    3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.

    hatte ich vorher. Aber vie kriege ich dann den text farbig?

    Z2 schrieb:

    4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).

    Das habe ich noch nie benutzt und weis dem entsprechned nicht wie das geht.
    Könnte dazu einer ein kleines Hallo welt bsp machen?

    Z2 schrieb:

    6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.

    Dann steht da etwas von zugriffsrechten oder so...

    @ReinerZufall
    Ich bin deinem Link gefolgt.
    Werde es in zukunft anders machen...



  • Sqwan schrieb:

    Z2 schrieb:

    Die letzte Zeile sollte irgendwo in einer Klasse oder einer Funktion stehen, weil es sonst eine globale Variable wäre und die sind böse.

    was sind globale veriablen. und wieso sind die böse?

    Globale Variablen sind Variablen, die global sind (sorry, konnte ich mir nicht verkneifen). Wenn du zum Beispiel außerhalb von Funktionen und Klassendefinitionen soetwas hier schreiben würdest:

    int x;

    dann wäre das eine globale Variable und sie wäre z.B. mit einem geeigneten Header auch in anderen Übersetzungseinheiten verfügbar.

    Es gibt bestimmt ein Dutzend Gründe, warum diese Dinger böse. Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst, wirst du die meisten davon vermutlich nicht verstehen. Stichworte wären zum Beispiel Probleme mit der Initialisierungsreihenfolge, Reduzierung der Wiederverwendbarkeit, Erhöhung der Startup-Zeit und so weiter und so fort ...

    Sqwan schrieb:

    Z2 schrieb:

    3. printf geht schon mal gar nicht. Das ist ein Überbleibsel aus C Zeiten. In C++ nimmt man dafür cout.

    hatte ich vorher. Aber vie kriege ich dann den text farbig?

    Standard-C++ kennt keine Farben. Das gilt auch für Standard-C (also printf).

    Sqwan schrieb:

    Z2 schrieb:

    4. char[] ist kein guter Datentyp für Strings. In C++ nimmt man dafür std::string (header <string> nicht vergessen).

    Das habe ich noch nie benutzt und weis dem entsprechned nicht wie das geht.
    Könnte dazu einer ein kleines Hallo welt bsp machen?

    #include <string>
    #include <iostream>
    
    int main()
    {
        std::sting String ("Hello World");
        std::cout << String << std::endl;
    }
    

    Einfacher geht es nun wirklich nicht mehr. Dazu gibts aber eigentlich mehr als genug Links und Material hier im Forum. Wenn du dich nur ein klein wenig umsiehst, findest du dazu alles, was du brauchst (hab jetzt keine Lust dir einen Link rauszusuchen, ein Bißchen was kannst du auch machen).

    Sqwan schrieb:

    Z2 schrieb:

    6. Datenmember (auch Attribute genannt) wie zum Beispiel Autor oder Titel sollten private sein, nicht public.

    Dann steht da etwas von zugriffsrechten oder so...

    Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.

    Edit: Rechtschreibung



  • Z2 schrieb:

    Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst,

    Ich hoffe mal das sollte keine beleidigung sein.
    Denn ich komme sehr gut mit Schleifen zurecht.
    Ich wusste nur nicht das gotos unuter todesstreafe stehen.

    Z2 schrieb:

    Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.

    Ich habe am anfang gesagt das ich 0 plan von Objektorientierung habe bis auf das bsp aus meinem buch.
    Von Memberfunctionen habe ich noch nie was gehört.
    Immerhin wollte ich das mir hier geholfen wird Objektorientierung zu lernen.

    was printf() angeht:
    In Programmen die sinn machen sollen werde ich das in zukunft vermeiden.
    Doch in dem simplen autorennen is die Farbe doch optisch ansprechender.
    Und mit cout lässt sich das nicht Färben.

    Und dann kannst du mir auch direkt für das nutzen vorkompilierter header den kopf abreißen.
    Aber am besten erklärst du direkt warum auch das verboten ist.

    PS: Mein aktuelle code...

    //Autorennen.cpp
    //Dieses Programm wird ein Autorennen enthalten...
    
    #include <stdio.h>
    #include <iostream.h>
    #include <conio.h>
    #include <windows.h>
    
    #include "stdafx.h"
    #include "CONIOEX.h"
    
    class Autos
    {
    	public:
    		int a1, a2;
    
    		void auto1(int a1)
    		{
    			textcolor(LIGHTRED);
    			gotoxy(a1,3);
    			printf("\"O==O_");
    			textcolor(WHITE);
    		}
    
    		void auto2(int a2)
    		{
    			textcolor(YELLOW);
    			gotoxy(a2,7);
    			printf("^O==O_");
    			textcolor(WHITE);
    		}
    		void clean()
    		{
    			clrscr();
    		}
    
    } autorennen;
    
    class background
    {
    	public:
    
    		void gezeichnet()
    		{
    			int i;
    
    			//Start design
    
    			textcolor(LIGHTGREEN); //Textfarbe Ändern
    			gotoxy(1,1);	printf("x"); Sleep(30);
    			gotoxy(1,2);	printf("x"); Sleep(30);
    			gotoxy(1,3);	printf("x"); Sleep(30);
    			gotoxy(1,4);	printf("x"); Sleep(30);
    			gotoxy(1,5);	printf("x"); Sleep(30);
    			gotoxy(1,6);	printf("x"); Sleep(30);
    			gotoxy(1,7);	printf("x"); Sleep(30);
    			gotoxy(1,8);	printf("x"); Sleep(30);
    			gotoxy(1,9);	printf("x"); Sleep(30);
    
    			gotoxy(2,1);	printf("x"); Sleep(30);
    			gotoxy(2,2);	printf("x"); Sleep(30);
    			textcolor(LIGHTRED); //textfarbe ändern
    			gotoxy(2,3);	printf("S"); Sleep(30);
    			gotoxy(2,4);	printf("T"); Sleep(30);
    			gotoxy(2,5);	printf("A"); Sleep(30);
    			gotoxy(2,6);	printf("R"); Sleep(30);
    			gotoxy(2,7);	printf("T"); Sleep(30);
    			textcolor(LIGHTGREEN); //textfarbe ändern
    			gotoxy(2,8);	printf("x"); Sleep(30);
    			gotoxy(2,9);	printf("x"); Sleep(30);
    
    			gotoxy(3,1);	printf("x"); Sleep(30);
    			gotoxy(3,2);	printf("x"); Sleep(30);
    			gotoxy(3,3);	printf("x"); Sleep(30);
    			gotoxy(3,4);	printf("x"); Sleep(30);
    			gotoxy(3,5);	printf("x"); Sleep(30);
    			gotoxy(3,6);	printf("x"); Sleep(30);
    			gotoxy(3,7);	printf("x"); Sleep(30);
    			gotoxy(3,8);	printf("x"); Sleep(30);
    			gotoxy(3,9);	printf("x"); Sleep(30);
    			//Start design ende
    
    			//Ziel design
    			gotoxy(78,1);	printf("x"); Sleep(30);
    			gotoxy(78,2);	printf("x"); Sleep(30);
    			gotoxy(78,3);	printf("x"); Sleep(30);
    			gotoxy(78,4);	printf("x"); Sleep(30);
    			gotoxy(78,5);	printf("x"); Sleep(30);
    			gotoxy(78,6);	printf("x"); Sleep(30);
    			gotoxy(78,7);	printf("x"); Sleep(30);
    			gotoxy(78,8);	printf("x"); Sleep(30);
    			gotoxy(78,9);	printf("x"); Sleep(30);
    
    			gotoxy(79,1);	printf("x"); Sleep(30);
    			gotoxy(79,2);	printf("x"); Sleep(30);
    			textcolor(LIGHTRED);
    			gotoxy(79,3);	printf("Z"); Sleep(30);
    			gotoxy(79,4);	printf("I"); Sleep(30);
    			gotoxy(79,5);	printf("I"); Sleep(30);
    			gotoxy(79,6);	printf("E"); Sleep(30);
    			gotoxy(79,7);	printf("L"); Sleep(30);
    			textcolor(LIGHTGREEN);
    			gotoxy(79,8);	printf("x"); Sleep(30);
    			gotoxy(79,9);	printf("x"); Sleep(30);
    
    			gotoxy(80,1);	printf("x"); Sleep(30);
    			gotoxy(80,2);	printf("x"); Sleep(30);
    			gotoxy(80,3);	printf("x"); Sleep(30);
    			gotoxy(80,4);	printf("x"); Sleep(30);
    			gotoxy(80,5);	printf("x"); Sleep(30);
    			gotoxy(80,6);	printf("x"); Sleep(30);
    			gotoxy(80,7);	printf("x"); Sleep(30);
    			gotoxy(80,8);	printf("x"); Sleep(30);
    			gotoxy(80,9);	printf("x"); Sleep(30);
    			textcolor(WHITE);
    			//Zieldesign ende
    
    			//Straßenmarkierung 
    			for(i=4; i<=77; i++)
    			{
    				gotoxy(i,1);	printf("-"); Sleep(15);
    				gotoxy(i,9);	printf("-"); Sleep(15);
    			}
    			for(i=4; i<=76; i=i+2)
    			{
    				gotoxy(i,5);	printf("-"); Sleep(30);
    			}
    		}
    
    		void ungezeichnet()
    		{
    			int i;
    
    			//Start design
    
    			textcolor(LIGHTGREEN); //Textfarbe Ändern
    			gotoxy(1,1);	printf("x");
    			gotoxy(1,2);	printf("x");
    			gotoxy(1,3);	printf("x");
    			gotoxy(1,4);	printf("x");
    			gotoxy(1,5);	printf("x");
    			gotoxy(1,6);	printf("x");
    			gotoxy(1,7);	printf("x"); 
    			gotoxy(1,8);	printf("x"); 
    			gotoxy(1,9);	printf("x"); 
    
    			gotoxy(2,1);	printf("x"); 
    			gotoxy(2,2);	printf("x"); 
    			textcolor(LIGHTRED); //textfarbe ändern
    			gotoxy(2,3);	printf("S");
    			gotoxy(2,4);	printf("T"); 
    			gotoxy(2,5);	printf("A"); 
    			gotoxy(2,6);	printf("R"); 
    			gotoxy(2,7);	printf("T"); 
    			textcolor(LIGHTGREEN); //textfarbe ändern
    			gotoxy(2,8);	printf("x"); 
    			gotoxy(2,9);	printf("x"); 
    
    			gotoxy(3,1);	printf("x"); 
    			gotoxy(3,2);	printf("x"); 
    			gotoxy(3,3);	printf("x"); 
    			gotoxy(3,4);	printf("x"); 
    			gotoxy(3,5);	printf("x"); 
    			gotoxy(3,6);	printf("x"); 
    			gotoxy(3,7);	printf("x"); 
    			gotoxy(3,8);	printf("x"); 
    			gotoxy(3,9);	printf("x");
    			//Start design ende
    
    			//Ziel design
    			gotoxy(78,1);	printf("x"); 
    			gotoxy(78,2);	printf("x");
    			gotoxy(78,3);	printf("x");
    			gotoxy(78,4);	printf("x");
    			gotoxy(78,5);	printf("x");
    			gotoxy(78,6);	printf("x"); 
    			gotoxy(78,7);	printf("x"); 
    			gotoxy(78,8);	printf("x"); 
    			gotoxy(78,9);	printf("x");
    
    			gotoxy(79,1);	printf("x"); 
    			gotoxy(79,2);	printf("x"); 
    			textcolor(LIGHTRED);
    			gotoxy(79,3);	printf("Z"); 
    			gotoxy(79,4);	printf("I");
    			gotoxy(79,5);	printf("I");
    			gotoxy(79,6);	printf("E");
    			gotoxy(79,7);	printf("L");
    			textcolor(LIGHTGREEN);
    			gotoxy(79,8);	printf("x"); 
    			gotoxy(79,9);	printf("x"); 
    
    			gotoxy(80,1);	printf("x"); 
    			gotoxy(80,2);	printf("x"); 
    			gotoxy(80,3);	printf("x"); 
    			gotoxy(80,4);	printf("x"); 
    			gotoxy(80,5);	printf("x");
    			gotoxy(80,6);	printf("x"); 
    			gotoxy(80,7);	printf("x");
    			gotoxy(80,8);	printf("x");
    			gotoxy(80,9);	printf("x"); 
    			textcolor(WHITE);
    			//Zieldesign ende
    
    			//Straßenmarkierung 
    			for(i=4; i<=77; i++)
    			{
    				gotoxy(i,1);	printf("-"); 
    				gotoxy(i,9);	printf("-");
    			}
    			for(i=4; i<=76; i=i+2)
    			{
    				gotoxy(i,5);	printf("-");
    			}
    		}
    } hintergrund;
    
    void main()
    {
    	textcolor(WHITE);
    	char nochmal = 0;
    
    	do
    	{
    		autorennen.clean();
    		hintergrund.gezeichnet();
    
    		char start=0;
    		char taste=0;
    		char zwichenspeicher_a=0;
    		char zwichenspeicher_b=0;
    
    		int a1 = 4;
    		int a2 = 4;
    		autorennen.auto1(a1);
    		autorennen.auto2(a2);
    
    		while(a1 <= 77 && a2 <=77)
    		{
    			taste=getch();
    
    			if(taste == 'a' || taste == 's')
    			{
    				if(taste != zwichenspeicher_a)
    				{
    					autorennen.clean();
    					hintergrund.ungezeichnet();
    					a1++;
    					autorennen.auto1(a1);
    					autorennen.auto2(a2);
    					zwichenspeicher_a=taste;
    				}
    			}
    			else if(taste == 'k' || taste == 'l')
    			{
    				if(taste != zwichenspeicher_b)
    				{
    					autorennen.clean();
    					hintergrund.ungezeichnet();
    					a2++;
    					autorennen.auto1(a1);
    					autorennen.auto2(a2);
    					zwichenspeicher_b=taste;
    				}
    			}
    
    		}
    		gotoxy(1,12); printf("Nochmal?");
    		nochmal = getch();
    	}
    	while(nochmal != '0');
    
    }
    


  • Sqwan schrieb:

    Z2 schrieb:

    Wenn du allerdings noch in der Phase bist mit gotos zu arbeiten, weil du mit den grundsätzlichen Schleifen-Strukturen nicht klar kommst,

    Ich hoffe mal das sollte keine beleidigung sein.

    Nein, sollte es nicht. Bin mal davon ausgegangen, daß du Probleme mit Schleifen hast, weil ich nun wirklich nicht nachvollziehen kann, warum sonst jemand gotos verwenden sollte. Sorry, Fehlannahme auf meiner Seite.

    Sqwan schrieb:

    Ich wusste nur nicht das gotos unuter todesstreafe stehen.

    Steht es leider nicht, zuallererst mal weil es in diesem Land keine Todesstrafe gibt. Es sollte aber unter Todesstrafe stehen (nur meine persönliche Meinung).

    Sqwan schrieb:

    Z2 schrieb:

    Genau! Das passiert, wenn du von Außen versuchst auf die Attribute zuzugreifen. Das sollst du ja eben nicht machen. Dazu gibt es Memberfunktionen.

    Ich habe am anfang gesagt das ich 0 plan von Objektorientierung habe bis auf das bsp aus meinem buch.
    Von Memberfunctionen habe ich noch nie was gehört.

    Memberfunktionen = Methode. Sagt dir der Begriff vielleicht etwas? Im Bereich des OOP gibt es für jeden Begriff etwa hundert Synonyme. Das kann schon mal etwas verwirrend sein.

    Was das lernen von OOP in einem Forum-Thread betrift, so glaube ich nicht, daß das möglich/sinnvoll ist. Du solltest dir zunächst zumindestens mal die Grundlagen aneignen und wenn du dann konkrete Fragen hast, kannst du wiederkommen.

    Sqwan schrieb:

    was printf() angeht:
    In Programmen die sinn machen sollen werde ich das in zukunft vermeiden.
    Doch in dem simplen autorennen is die Farbe doch optisch ansprechender.
    Und mit cout lässt sich das nicht Färben.

    Das Problem kann ich nicht nachvollziehen. Aber mag sein, daß du recht hast. Hier geht es offenbar um Windows-Konsolen und davon habe ich nun überhaupt keine Ahnung.

    Sqwan schrieb:

    Und dann kannst du mir auch direkt für das nutzen vorkompilierter header den kopf abreißen.
    Aber am besten erklärst du direkt warum auch das verboten ist.

    Wenn sie funktionieren, spricht eigentlich nichts gegen vorkopilierte Header. Ich benutze sie im Allgemeinen nicht, aber mir ist kein fundamentaler Grund bekannt sie zu meiden.



  • Ach, was soll's! Ich hab gerade ein klein Bißchen Zeit. Hier ein object-orientierter Entwurf. Die Details mußt du natürlich selbst ausarbeiten:

    #include <vector>
    // übrigen includes kannst du dir selbst raussuchen
    
    class wagen
    {
       private:
    
           char d_Taste1
           char d_Taste2;
           bool d_LetzteTaste;
           int d_Farbe; // hoffe mal, das ist ein int
           int d_Position;
    
        public:
    
            wagen (char Taste1, char Taste2, int Farbe);
            // Konstruktor
    
            void Zeichne();
            // Zeichnet den Wagen
    
            bool InterpretiereTaste (char Taste);
            // Mit zu Wagen gehörende Tasten vergleichen und ggf. Wagen bewegen
            // Return: Taste bekannte?
    
            bool ZielErreicht() const;
    };
    
    wagen::wagen (char Taste1, char Taste2, int Farbe)
    : d_Taste1 (Taste1), d_Taste2 (Taste2), d_LetzteTaste (0), d_Farbe (Farbe),
      d_Position (0)
    {}
    
    // die übrigen Funktionen darfst du selbst schreiben
    
    class rennstrecke
    {
            std::vector<wagen> d_Wagen;
    
        public:
    
            void WagenHinzufügen (const wagen& Wagen);
    
            void Zeichne();
    
            bool InterpretiereTaste (char Taste);
            // Return: Sieger ermittelt?
    };
    
    int main()
    {
        rennstrecke Rennstrecke;
    
        Rennstrecke.Wagenhinzufügen (wagen ('a', 's', LIGHTRED));
        // 2. Wagen entsprechend
    
        do
        {
            Rennstrecke.Zeichne();
        }
        while (!Rennstrecke.InterpretiereTaste (getch()));
    }
    

    Das Spiel würde in diesem Fall nur einmal laufen, aber die nochmal-Schleife kannst du dir ja selbst hinzuüfgen.

    Alles natürlich ungetestet und ohne jede Garantie.



  • Was das lernen von OOP in einem Forum-Thread betrift, so glaube ich nicht, daß das möglich/sinnvoll ist. Du solltest dir zunächst zumindestens mal die Grundlagen aneignen und wenn du dann konkrete Fragen hast, kannst du wiederkommen.
    

    Joa. En paar bÜcher und ca. 5 tuts zu OOP habe ich mir schon angesehen.
    An diesem Autorennen-code kann man sehen das ich es nach forschrift eines buch hinbekomme. Leider ist mein erstes problem das ich nie weis was man am sinnvollsten als Objekt nimmt, zweitens was dann die dazugehörige klasse ist, und dann noch die regeln wann man public, private oder protected nimmt.

    EDIT:
    THX. Das bearbeite ich mal und denke mich mal rein...



  • Also ich habe deinen Code mal überarbeitet.
    En paar fehler habe ich weg bekommen.

    --------------------Konfiguration: autorennen4 - Win32 Debug--------------------
    Kompilierung läuft...
    autorennen4.cpp
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(44) : error C2018: Zeichen '0xfc' unbekannt
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(44) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'gen'
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2018: Zeichen '0xfc' unbekannt
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'gen'
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(56) : error C2065: 'gen' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    
    autorennen4.exe - 5 Fehler, 0 Warnung(en)
    

    Das ist noch übrig.
    Leider kann nirgend ein 'gen' finden.
    Und 0xfc habe ich auch nirgends gefunden.
    Woran kann das liegen.
    Bzw was muss ich mir mal genauer ansehen?

    wagen::wagen (char Taste1, char Taste2, int Farbe) 
    : d_Taste1 (Taste1), d_Taste2 (Taste2), d_LetzteTaste (0), d_Farbe (Farbe), 
      d_Position (0) 
    {}
    

    Das verwirrt mich auch.
    Sowas habe ich noch nie gesehen.
    Was genau macht das. Sowas gibts in meinem Buch garnet...



  • Was die Fehlermeldung betrifft, zeig mal die relevanten Zeilen.

    Und was den Quelltext betrifft, den du nicht verstehst: Das ist ein Konstruktor mit Initialisiererliste. Elementarste Grundlagen. Wenn das in deinem Buch nicht drin steht, solltest du dir ein anderes Buch suchen.



  • Habe den fehler gefunden

    WagenHinzufügen kann man nicht nehmen.
    das ü macht probleme.

    jetzt gibts andere fehler.

    --------------------Konfiguration: autorennen4 - Win32 Debug--------------------
    Kompilierung läuft...
    autorennen4.cpp
    c:\dokumente und einstellungen\master\eigene dateien\neuer ordner\autorennen4\autorennen4.cpp(63) : error C2065: 'LIGHTRED' : nichtdeklarierter Bezeichner
    Fehler beim Ausführen von cl.exe.
    
    autorennen4.exe - 1 Fehler, 0 Warnung(en)
    

    Das passiert wenn ich die CONIOEX.h nicht include.

    leider ist da die function textcolor drinne.
    Include ich die conioex.h ahbe cih folgende fehler:

    --------------------Konfiguration: autorennen4 - Win32 Debug--------------------
    Kompilierung läuft...
    autorennen4.cpp
    Linker-Vorgang läuft...
    autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: bool __thiscall rennstrecke::InterpretiereTaste(char)" (?InterpretiereTaste@rennstrecke@@QAE_ND@Z)
    autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall rennstrecke::Zeichne(void)" (?Zeichne@rennstrecke@@QAEXXZ)
    autorennen4.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall rennstrecke::WagenHinzufugen(class wagen const &)" (?WagenHinzufugen@rennstrecke@@QAEHABVwagen@@@Z)
    Debug/autorennen4.exe : fatal error LNK1120: 3 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    
    autorennen4.exe - 4 Fehler, 0 Warnung(en)
    


  • Habe ich wirklich Hinzufügen in einen Funktionsnamen geschrieben? Oh, Mann! Wie bescheuert! Sorry, hätte ich vorher noch mal korrekturlesen sollen. Kommt davon, wenn man normalerweise nur englische Namen benutzt und dann plötzlich deutsche hinschreiben muß.

    Edit: Dir fehlen mehrere Funktionen. Die mußt du natürlich noch implementieren. Außer dem wagen-Konstruktor und der main hab ich ja alle Implementierungen ausgelassen.



  • mmhh, ersetze mal die umlaute in dem code..anscheinend schluckt das der compiler nicht...

    edit : zu spät..



  • ConfusedGuy schrieb:

    mmhh, ersetze mal die umlaute in dem code..anscheinend schluckt das der compiler nicht...

    Nein, Umlaute sind in Bezeichnern in der Tat nicht erlaubt. Sorry, noch mal.



  • Ich habe ja schon alle umlaute gelöscht.

    Aber wie kann cih denn zeichenketten in einem Bool speichern?
    Muss das nicht dann ein char sein oder so?

    weil die functionen habe ich bereits drinne.
    Und muss ich die Variablen auch alle verarbeiten.

    Ich glaube eher das der fehler bei conioex.c liegt.
    Weil ohen die klappts ja eigndlich.
    nur lightred geht halt nicht...



  • Ein bool kann keine Zeichenketten nehmen. Und dein Fehler hat nichts mit dieser header-Datei zu tun. Das ist nämlich ein link-Fehler. Wenn du den header raus nimmst, hast du einen compile-Fehler und die link-stage wird gar nicht erst gestartet (deshalb tritt der Fehler dann nicht auf).

    Edit: Rechtschreibung

    Edit2: Falls du auf d_LetzteTaste abspielst: das müßte ein char sein, kein bool. Sorry ein weiteres mal, war wohl sehr in Eile, als ich das geschrieben habe.


Anmelden zum Antworten