Antwort schreiben  Thema schreiben 
Verfasser Nachricht
davdda
Captain Morgan
*


Beiträge: 2.482
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 1220
Beitrag: #1
xPSP  Was mache ich falsch?

Hallo,
ich lerne gerade C# und hab mir da diesen Code "zusammengebastelt".

Code:
namespace tests
{
    
    class Program
    {
        int rechnen(int a, int b)
        {
            int ergebnis = a + b;
            return ergebnis;
        }
        static void Main(string[] args)
        {
            
            int zahl1 = 0;
            zahl1 = rechnen(2,3);
            Console.WriteLine(zahl1);
            Console.Read();
        }
    }
}

Eigentlich sollte ich doch jetzt einfach 5 ausgegeben bekommen, doch ich bekomme vom Kompiller immer die Meldung:

Code:
Fehler    1    Für das nicht statische Feld, die Methode oder die Eigenschaft "tests.Program.rechnen(int, int)" ist ein Objektverweis erforderlich.


Könnt ihr mir sagen was ich falsch mache???
Danke im vorraus

21.07.2011 17:08
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Dreiundachzig
King
*


Beiträge: 2.883
Gruppe: User
Registriert seit: May 2009

Status: Offline
Danke erhalten: 1010
Beitrag: #2
RE: Was mache ich falsch?

Das erinnert stark an Java und da ging es schon nicht, einfach nur int rechnen() zu definieren. Versuch es mal mit public int rechnen() oder static int rechnen()

21.07.2011 17:39
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
davdda (Jul-21-2011)
davdda
Captain Morgan
*


Beiträge: 2.482
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 1220
Beitrag: #3
xPSP  RE: Was mache ich falsch?

Dreiundachzig :
Das erinnert stark an Java und da ging es schon nicht, einfach nur int rechnen() zu definieren. Versuch es mal mit public int rechnen() oder static int rechnen()


Danke Smile
mit static int gehts.

21.07.2011 17:42
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #4
xPSP  RE: Was mache ich falsch?

Dieses Problem mit static zu lösen behebt das Problem nur mit nebenwirkungen.

Das Problem liegt darin, das du aus einer statischen Funktion keine nicht statischen Objekte oder Funktionen aufrufen kannst. Dies kann man natürlich beheben in dem man das andere Objekt oder die Funktion ebenfalls statisch macht, so wie hier. Die Funktion kann dann aber ebenfalls keine anderen Funktionen mehr aufrufen, die nicht statisch sind, was dazu führt das dein Programm nur noch aus statischen Objekten und Funktionen besteht. Dadurch wird aber jeglicher Objektorientiert Vorteil verloren, weil du die Klassen nicht mehr als Objekte, sondern nur als Funktionshalter benutzen kannst.

Besser ist dehalb die Lösung einfach ein Objekt der Klasse anzulegen, und auf dessen "rechnen" Funktion zuzugreifen. Wie das in C# funktioniert weiß ich nicht, aber hier der Code in Java mit der C# Klasse Console, sollte ein nicht zu großer Unterschied sein

Code:
{
    
     class Program
     {
         int rechnen(int a, int b)
         {
             int ergebnis = a + b;
             return ergebnis;
         }
         static void main(string[] args)
         {
            
             int zahl1 = 0;

             Programm Programm = new Programm();
             zahl1 = Programm.rechnen(2,3);

             Console.WriteLine(zahl1);
             Console.Read();
         }
     }
}

Dieser Beitrag wurde zuletzt bearbeitet: 21.07.2011 17:52 von Rroia.

21.07.2011 17:51
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
davdda (Jul-21-2011)
Dreiundachzig
King
*


Beiträge: 2.883
Gruppe: User
Registriert seit: May 2009

Status: Offline
Danke erhalten: 1010
Beitrag: #5
xPSP  RE: Was mache ich falsch?

Rroia :

Code:
{
    
     class Program
     {
         int rechnen(int a, int b)
         {
             int ergebnis = a + b;
             return ergebnis;
         }
         static void main(string[] args)
         {
            
             int zahl1 = 0;

             Programm Programm = new Programm();
             zahl1 = Programm.rechnen(2,3);

             Console.WriteLine(zahl1);
             Console.Read();
         }
     }
}

Da würde aber ein Fehler auftauchen, weil du Program definierst, aber Programm verwenden möchtest.
Da sollte man dann lieber auf this.rechnen() greifen.

21.07.2011 18:08
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
davdda (Jul-21-2011)
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #6
xPSP  RE: Was mache ich falsch?

Dreiundachzig :
Da würde aber ein Fehler auftauchen, weil du Program definierst, aber Programm verwenden möchtest.
Da sollte man dann lieber auf this.rechnen() greifen.


Ich will dich jetzt erlich nicht schlechtreden, aber this.rechnen() würde keine verbesserung zum Anfangscode bringen. Wenn keine Klasse vor der Funktion steht wird immer this.rechnen() genommen.
Und zumindest in java gibt es kein Problem wenn man die Klasse die man grade schreibt in sich selbst verwendet, kann bei C# aber alles anders sein.

21.07.2011 18:37
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
davdda
Captain Morgan
*


Beiträge: 2.482
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 1220
Beitrag: #7
xPSP  RE: Was mache ich falsch?

Jetzt hab ich nen anderes Problem, der Code sieht mittlerweile so aus:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test1
{
    class Program
    {

        //plusrechnungsfunktion
        static int plus(int a, int b)
        {
            int sum = a + b;
            return sum;
        }
        //minusrechnungsfunktion noch unbenutzt
        static int minus(int a, int b)
        {
            int sum = a - b;
            return sum;
        }

        //malrechnungsfunktion noch unbenutzt
        static int mal(int a, int b)
        {
            int sum = a * b;
            return sum;
        }

        //teilenfunktion noch unbenutzt
        static int teilen(int a, int b)
        {
            int sum = a / b;
            return sum;
        }

        static void Main(string[] args)
        {
            //Variablen:
            string eingabe = ""; //wird zum rechnen benutzt
            //wird nicht angezeigt, falls das Programm zurückspringt
            Console.WriteLine("Taschenrechner.exe \nVersion: Test \nMady by David N. \n \nDrücke eine belibiege Taste zum Starten.");
            Console.Read();
            Top:
            Console.WriteLine("Hallo");
            Console.Read();

        }
    }
}

Aber das Console.Read(); wird einfach ignoriert und die Konsole wird beendet Noidea Noidea

Dieser Beitrag wurde zuletzt bearbeitet: 21.07.2011 18:46 von davdda.

21.07.2011 18:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
JensMan
Profi
****


Beiträge: 430
Gruppe: User
Registriert seit: Nov 2010

Status: Offline
Danke erhalten: 118
Beitrag: #8
RE: Was mache ich falsch?

mach mal Console.ReadKey();

und wofür ist das Top: ?

Dieser Beitrag wurde zuletzt bearbeitet: 21.07.2011 19:08 von JensMan.

21.07.2011 19:05
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Rroia
Profi
****


Beiträge: 303
Gruppe: User
Registriert seit: Apr 2010

Status: Offline
Danke erhalten: 173
Beitrag: #9
xPSP  RE: Was mache ich falsch?

JensMan :
mach mal Console.ReadKey();

und wofür ist das Top: ?


Top ist ein Label, er will wahrscheinlich mit GOTO wieder nach oben springen wenn eine Rechenoperation fertig ist.

Besser wäre da aber ein Endlosschleife mit while(true)

21.07.2011 19:15
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
davdda
Captain Morgan
*


Beiträge: 2.482
Gruppe: User
Registriert seit: Dec 2010

Status: Abwesend
Danke erhalten: 1220
Beitrag: #10
RE: Was mache ich falsch?

Danke an Lett1 ,dass er sich mit Noobs wie mir rumärgert Big Grin
Der funktionierende Code sieht nun so aus:

Code:
using System;


namespace test1
{
    class Program
    {

        //plusrechnungsfunktion
        static int plus(int a, int b)
        {
            return a + b;
        }
        //minusrechnungsfunktion noch unbenutzt
        static int minus(int a, int b)
        {
            return a - b;
        }

        //malrechnungsfunktion noch unbenutzt
        static int mal(int a, int b)
        {
            return a * b;
        }

        //teilenfunktion noch unbenutzt
        static int teilen(int a, int b)
        {
            return a / b;
        }

        /// <summary>
        /// Die Main funktion
        /// </summary>
        /// <param name="args">argumente hurr</param>
        static void Main(string[] args)
        {
            string eingabe = ""; //wird zum rechnen benutzt
            //wird nicht angezeigt, falls das Programm zurückspringt
            Console.WriteLine("Taschenrechner.exe \nVersion: Test \nMady by David N. \n \nDrücke eine belibiege Taste zum Starten.");
            Console.ReadLine();
            Top:
            Console.WriteLine("Hallo");
            Console.ReadLine();
        }
    }
}

21.07.2011 19:20
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xPSP Ich mache euch eure Schriftarten für die PSP kompatibel ! Portable 10 3.767 05.10.2011 20:36
Letzter Beitrag: BLOOD_ANGEL
xPSP LUA "Fehler" was ist daran falsch? Mishka84 6 2.066 09.05.2011 19:46
Letzter Beitrag: Mishka84
xPSP Was ist falsch? RainMan 7 1.887 07.08.2010 11:26
Letzter Beitrag: RainMan

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang