Innerhalb einer Funktion andere Variablennamen

Moin,

versuch es lieber so:
C++:
rechner_potenz rechner();
int iErg = rechner.rechner_quadrat(2,3);
cout << iErg;

gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Da kommt noch immer ncihts außer folgender Fehler:
request for member `rechner_quadrat' in `rechner', which is of non-class type `rechner_potenz ()()'

mfg
 
Der Standardkonstruktor wird nicht explizit aufgerufen. Was du, bzw vfl_freak, da machst ist eine Funktion anzudeuten, die rechner heisst, keine Parameter erwartet und rechner_potenz als Rückgabewert hat.

C++:
rechner_potenz rechner;
rechner.rechner_quadrat();
 
Sorry, da war ich zu schnell [EDIT] und auch zu langsam :-D

C++:
rechner_potenz rechner = new rechner_potenz();
int iErg = rechner.rechner_quadrat(2,3);
cout << iErg;

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Da hast du dich jetzt an C# oder Java angelehnt ;)
C++:
// Entweder:
rechner_potenz* pRechner = new rechner_potenz();
pRechner->rechner_quadrat();

// Oder
rechner_potenz rechner = rechner_potenz();
rechner.rechner_quadrat();

// Oder eben:
rechner_potenz rechner;
rechner.rechner_quadrat();
 
Ok ,aber irgendwie wschaffe ich es immer noch nicht.
Wenn ich die Funktion mit den Werten 2,3 aufrufe bekomm ich als Ergebnis 1.
Hier mal der ganze Code, ist ja icht sonderlich lang und komplitziert:
Code:
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

class rechner_potenz {
      
      public:
      int n;
      int a;
      
      int rechner_quadrat (int a,int n = 2) {
             int ergebnis;
             if (a || n == 0) {
                   return 1;
                   }
                   else {
                      for (int i=1; i<=n; i++) {
                          ergebnis = ergebnis*a;
                          }
                          return ergebnis;
                          }
      }
};
             
      

int main(int argc, char *argv[])
{
    rechner_potenz rechner;
    cout << rechner.rechner_quadrat(2,3);
    string egal;
    cin >> egal; 
    return 0;
}
 
Hi.
Ok ,aber irgendwie wschaffe ich es immer noch nicht.
Wenn ich die Funktion mit den Werten 2,3 aufrufe bekomm ich als Ergebnis 1.
Das kommt einfach daher weil du es falsch berechnest. Ich weiß ja nicht was die Funktion machen soll, aber deine Schleife macht überhaupt keinen Sinn, da am Ende in ergebnis immer n * a steht. Da könntest du die Schleife auch gleich weglassen. (Sorry, da hab ich mich verguckt. Mea culpa :-()

In die Schleife allerdings kommst du nur rein falls a == 0 und n == 0 ist, aber das sagte dir bereits jemand.

Von der Bennung der Funktion hätte ich vermutet das die Funktion ein Quadrat von irgendwas berechnet. Das macht sie auf keinen Fall.

\edit: Und wozu hast du noch 2 Attribute a und n in der Klasse? Und wieso sind die public?

Gruß
 
Zuletzt bearbeitet:
Also ersteinmal verstehe ich nicht, warum du nicht einfach pow() verwendest, was dir genau das einfach macht, ich nehme mal an aus Übungszwecken (?).

Zu deinem Fehler:
Hier mal wie es funktioniert:

Code:
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

class rechner_potenz {
      
      public:
      int n;
      int a;
      
      int rechner_quadrat (int a,int n = 2) {
             int ergebnis=a; //Muss sein, sonst nimmst du unten irgendwas mal a.
             if (n == 0) {  //wenn du hier a stehen kannst, wird das immer zu true -> Ergebnis immer 1
                   return 1;
                   }
                   else {
                      for (int i=2; i<=n; i++) { //da oben schon ergebnis=a, beginnen wir hier mit i=2
                          ergebnis = ergebnis*a;
                          }
                          return ergebnis;
                          }
      }
};

            
      

int main(int argc, char *argv[])
{
    rechner_potenz rechner;
    cout << rechner.rechner_quadrat(2,3);
    string egal;
    cin >> egal; 
    return 0;
}
Gruß,

badday
 
Ok das ahbe ich nun alles kapiert und schon ein paar weitere Funktionen implementiert.
Eine davon erstellt ein Menü.
Es läuft alles Prima, nur das Problem ist, dass ich eine do while Schleife eingebaut habe, dass zb. wenn das Menü 2 Punkte mit 1 und 2 hat, keiner 3 eingeben kann.
Dann sollte es eigentlich noch einmal fragen, aber es funktioniert nicht.
Hier der Code der ganzen Funktion:

Code:
int Aussehen::Menue () {
     
     int Hoechstwert = 2;
     string Menuepunkte [Hoechstwert];
     Menuepunkte[0] = "Rechner";
     Menuepunkte[1] = "Beenden";    
     for (int i = 0; i <= Hoechstwert - 1; i++) {
         cout << Menuepunkte[i] << " (" << i+1 << ")    ";
         }
     
     int MenuepunktBenutzer;
     bool Eingabe;     
     do {
     cout << endl << "Fuer welchen Punkt haben sie sich entschieden?" << endl;
     cin >> MenuepunktBenutzer;
     
     if (MenuepunktBenutzer > Hoechstwert) {
         cout << endl << "Ihr angegebener Wert ist falsch!";
         Eingabe = false;
         } else {
                Eingabe != true;
                }
     } while (Eingabe = false);
     return MenuepunktBenutzer;
}
 
Zurück