C++ Compilerfehler


  • 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