C++ Compilerfehler



  • Ein paar Kommentare zum Code:
    1. Ein Telefonbucheintrag sollte eine eigene Klasse sein.
    2. "nochmal" ist keine Eigenschaft eines Telefonbuchs, hat dort also auch nichts zu suchen.
    3. Der Header für std::string heißt string (ohne .h).
    4. Die "struct"s vor telefonbuch gehören außer bei der eigentlichen Klassendefinition dort nicht hin.
    5. Was möchtest du mit struct telefonbuch *ptr; ptr=&buch; in main erreichen?
    6. Benutze Referenzen statt Zeiger für nichtoptionale Funktionsparameter.
    7. Was Zeile 33 und 35 angeht: sieh nach, wie du es in Z.31 gemacht hast.
    8. for(int x=1;x<=10;x++) in eingabe und ausgabe ist falsch. Arrayindizes fangen bei 0 an. Im Body der Schleife in ausgabe ist ebenfalls ein Fehler nach Art von 7.



  • Danke Jung hat jetzt soweit hingehauen, möchte nun als übung ein Taschenrechner mit Structs und Pointern programmieren.
    Dachte ersteinmal an unterstrukturen:

    struct rechnervar
    {
        {
            long summand1;
            long summand2;
        }add;
    
        {
            long minuent1;
            long minuent2;
        }sub;
    
        {
            long multiplikator1;
            long multiplikator2;
    
        }mul;
        {
            long divisor1;
            long divisor2;
        }div;
    

    Leider mache ich dort was Falsch, aber was genau???



  • yummi2k10 schrieb:

    Danke Jung hat jetzt soweit hingehauen, möchte nun als übung ein Taschenrechner mit Structs und Pointern programmieren.
    Dachte ersteinmal an unterstrukturen:

    struct rechnervar
    {
        {
            long summand1;
            long summand2;
        }add;
    
        {
            long minuent1;
            long minuent2;
        }sub;
    
        {
            long multiplikator1;
            long multiplikator2;
    
        }mul;
        {
            long divisor1;
            long divisor2;
        }div;
    

    Leider mache ich dort was Falsch, aber was genau???

    Der ganze Ansatz scheint mir falsch zu sein. Wozu soll das gut sein?

    Aber vielleicht meinst du das ja so?

    struct rechnervar
    {
      struct add 
        {
            long summand1;
            long summand2;
        };
    
      struct sub 
        {
            long minuent1;
            long minuent2;
        };
    
      struct mul 
        {
            long multiplikator1;
            long multiplikator2;
        };
    
      struct div
        {
            long divisor1;
            long divisor2;
        };
    };
    

  • Mod

    Meinst du dies?

    union rechnervar
    {
      struct {
        long summand1;
        long summand2;
      }add;
    
      struct {
        long minuent1;
        long minuent2;
      }sub;
    
      struct {
        long multiplikator1;
        long multiplikator2;
      }mul;
    
      struct {
        long divisor1;
        long divisor2;
      }div; 
    };
    


  • Danke, nun will ich über den Pointer die unterstrukturen ansprechen:

    #include <iostream>
    using namespace std;
    
    struct rechner
    {
    
      struct add
        {
            long summand1;
            long summand2;
            long loesung;
        };
    
      struct sub
        {
            long minuent1;
            long minuent2;
            long loesung;
        };
    
      struct mul
        {
            long multiplikator1;
            long multiplikator2;
            long loesung;
        };
    
      struct div
        {
            long divisor1;
            long divisor2;
            long loesung;
        };
    
    };
    
    void addition(struct rechner *add);
    void subtraktion(struct rechner *sub);
    void multiplikation(struct rechner *mul);
    void division(struct rechner *div);
    
    int main()
    {
        int variante;
        struct rechner variablen;
        struct rechner *ptr;
        ptr=&variablen;
    
        cout<<"1->Addition 2->Subtraktion 3->Multiplikator 4->Division: ";
    
        cin>>variante;
        switch(variante)
        {
                case 1:
                    addition(ptr);
                    break;
                case 2:
                    subtraktion(ptr);
                    break;
                case 3:
                    multiplikation(ptr);
                    break;
                 case 4:
                     division(ptr);
                     break;
        }
    
    }
    
    void addition(struct rechner *add)
    {
        cout<<"Erster Multiplikator: ";
        cin>add.add->summand1;
        cout<<endl<<"Zweiter Multiplikator: ";
    }
    
    void subtraktion(struct rechner *sub)
    {
    
    }
    void multiplikation(struct rechner *mul)
    {
    
    }
    void division(struct rechner *div)
    {
    
    }
    

    cin>add.add->summand1; so klappt dass leider nicht, wie lautet der richtige Syntax?



  • Steck die Klassendefinition oder Strukturdefinition immer in ne Header-Datei und die Implementierung in ne Source-Datei.

    Deine Funktionen vom ersten Programm ( also eingabe und ausgabe ) würde ich auch in
    Header-Dateien( Funktionsdeklaration ) und Source-Dateien( Funktionsdefinition ) stecken.

    EDIT:
    Bei deinem Taschenrechner gilt das natürlich auch, also für die Funktionen Addition und so weiter;-)

    Gruß freeG


  • Mod

    yummiyummi schrieb:

    cin>add.add->summand1; so klappt dass leider nicht, wie lautet der richtige Syntax?

    cin>>add->add.summand1;

    Aber das ganze Design macht nicht einen Hauch von Sinn.



  • Ist nun auch erstmal um ein bisschen die Syntax zu üben, denn bin vor ner Stunde vom prodezualen C zu C++ umgestiegen.


  • Mod

    yummuyummi schrieb:

    Ist nun auch erstmal um ein bisschen die Syntax zu üben, denn bin vor ner Stunde vom prodezualen C zu C++ umgestiegen.

    Aber wäre es gerade dann nicht sinnvoll, objektorientiertes Design zu üben? Die Syntax von C und C++ ist schließlich quasi identisch. Das Ansprechen von Structs, Arrays und Pointern (wonach du hier gefragt hast) gibt es schließlich auch in C genauso. Bloß, dass du in C++ äußerst selten Pointer und Arrays brauchst - du brauchst sie hier bloß wegen deines komischen Designs.



  • In der Klausur wird aber genau das drann kommen :S

    cin>add.add->summand1;

    kannst du mir denn helfen und sagen wie ich nun summand1 anspreche ?



  • Das hier ist auch noch nicht so schön, aber nur damit du mal siehst, wie viel Code du dir eigentlich sparen kannst:

    #include <iostream>
    
    struct Result
    {
    	long zahl1;
    	long zahl2;
    };
    
    Result liesZahlen();
    long rechnen(Result res, char op);
    
    int main()
    {
    	while (true)
    	{
    		int eingabe;
    
    		do
    		{
    			std::cout << "--- Rechner ---" << std::endl;
    			std::cout << "1. Add\n2. Sub\n3. Mul\n4. Div\n5. End\n\nEingabe: ";
    			std::cin >> eingabe;
    		} while (eingabe < 1 || eingabe > 5);
    
    		switch (eingabe)
    		{
    			case 1:
    				std::cout << rechnen(liesZahlen(), '+') << std::endl;
    				break;
    
    			case 2:
    				std::cout << rechnen(liesZahlen(), '-') << std::endl;
    				break;
    
    			case 3:
    				std::cout << rechnen(liesZahlen(), '*') << std::endl;
    				break;
    
    			case 4:
    				std::cout << rechnen(liesZahlen(), '/') << std::endl;
    				break;
    
    			case 5:
    				return 0;
    		}
    	}
    }
    
    Result liesZahlen()
    {
    	Result res;
    
    	std::cout << "\n--- Eingabe ---\n";
    
    	std::cout << "Zahl 1: ";
    	std::cin >> res.zahl1;
    
    	std::cout << "Zahl 2: ";
    	std::cin >> res.zahl2;
    
    	return res;
    }
    
    long rechnen(Result res, char op)
    {
    	long r = res.zahl1;
    
    	switch (op)
    	{
    		case '+':
    			r += res.zahl2;
    			break;
    
    		case '-':
    			r -= res.zahl2;
    			break;
    
    		case '*':
    			r *= res.zahl2;
    			break;
    
    		case '/':
    			r /= res.zahl2;
    			break;
    	}
    
    	return r;
    }
    

  • Mod

    ymmmmmymym schrieb:

    In der Klausur wird aber genau das drann kommen :S

    cin>add.add->summand1;

    kannst du mir denn helfen und sagen wie ich nun summand1 anspreche ?

    Du hast deine Antwort schon, guck mal weiter oben im Thread.



  • SeppJ:

    leider sagt mein compiler dann:

    main.cpp:81: error: invalid use of ‘struct rechner::add’


Anmelden zum Antworten