windows forms / redefinierte methoden ausgabe



  • hi.

    label1->Text = Rechteck.BerechneFlaeche().ToString();
    

    okay..aber er sagt mir dann:

    error C2065: 'Rechteck': nichtdeklarierter Bezeichner

    error C2228: Links von ".BerechneFlaeche" muss sich eine Klasse/Struktur/Union befinden.

    error C2228: Links von ".ToString" muss sich eine Klasse/Struktur/Union befinden.

    soll soviel heißen wie: wieso findet er Rechteck nicht?

    Hab die Klasse ganz normal über den Klassenbrowser hinzugefügt..hmm

    wenn ich die form vor mir habe -> doppelklick auf das label und ich lande in der Form.h und an der stelle wo ich den quellcode für das label1 hinschreiben kann. is ja auch richtig das ich das da hingeschrieben hab..oder was mach ich falsch?

    wie kann ich dem beibringen das er meine klasse Rechteck findet?



  • Instance erzeugen

    Rechteck rechteck = new Rechteck();



  • in der Form1.h?

    weiss nich wo ich das so recht hinschreiben soll..normal hät ich sowas in der main geschrieben aber da 😕

    hab eien main in der aufgabe2.cpp gefunden wo auch das Form fenster erzeugt wird.

    aber das bringts auch nich

    error C2065: 'Rechteck': nichtdeklarierter Bezeichner



  • res0 schrieb:

    in der Form1.h?

    weiss nich wo ich das so recht hinschreiben soll..normal hät ich sowas in der main geschrieben aber da 😕

    hab eien main in der aufgabe2.cpp gefunden wo auch das Form fenster erzeugt wird.

    aber das bringts auch nich

    error C2065: 'Rechteck': nichtdeklarierter Bezeichner

    Entweder du machst es global (am einfachsten, aber auch am unschönsten), du kannst die Klassen aber auch static machen, oder du übergibst das Objekt an die Funktion wo du das ausgeben lässt.



  • global wäre doch wenn ich in der aufgabe2.cpp

    folgendes schreib:

    [cpp]
    // aufgabe2.cpp: Hauptprojektdatei.

    #include "stdafx.h"
    #include "Form1.h"

    //Meine Klassen
    #include "Geometrische_Figur.h" //Basisklasse
    #include "Rechteck.h"; //Abgeleitete Klasse
    #include "Kreis.h"; //Abgeleitete Klasse

    using namespace aufgabe2;

    [STAThreadAttribute]

    int main(array<System::String ^> ^args)
    {
    Rechteck test; // kreaiere ein object namens test
    //label1->Text = test->BerechneFlaeche().ToString();
    //test->Rechteck::BerechneFlaeche().ToString();

    // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false);

    // Hauptfenster erstellen und ausführen
    Application::Run(gcnew Form1());
    return 0;
    }

    [/cpp]



  • Das was du hier gepostet hast ist aber kein C# das weisst du oder?



  • schaut mal:

    // aufgabe2.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    #include "Form1.h"
    
    //Meine Klassen
    #include "Geometrische_Figur.h" //Basisklasse
    #include "Rechteck.h"; //Abgeleitete Klasse
    #include "Kreis.h"; //Abgeleitete Klasse
    
    using namespace aufgabe2;
    
    [STAThreadAttribute]
    
    int main(array<System::String ^> ^args)
    {
    	Rechteck test;
    	Form1 form;
    	float flaeche = 0;
    	test.Rechteck::BerechneFlaeche();
    	form.Text=test.BerechneFlaeche().ToString(flaeche);
    
    	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Hauptfenster erstellen und ausführen
    	Application::Run(gcnew Form1());
    	return 0;
    }
    

    ihr seht ja was nach dem main { kommt..bis zum ersten kommentar..das is was ich mr so gedacht habe, allerdings versteh ich eins nicht:

    error C2664: 'System::String ^System::Single::ToString(System::IFormatProvider ^)': Konvertierung des Parameters 1 von 'float' in 'System::IFormatProvider ^' nicht möglich



  • ja ich weiss.

    nur hab kein anderes forum gefunden wo was mit .NET stand 😞



  • Momomomo... Weisst Du was Deine Befehle da machen? Ich glaub wir gehen das mal kurz durch 😉

    Rechteck test;
    

    Erstellt ein Rechteck, dessen Name ist test (OK)

    float flaeche = 0;
    

    Erstellt eine Kommavariable, mit dem Namen flaeche und dem initialen Wert 0 (auch OK)

    test.Rechteck::BerechneFlaeche();
    

    Rufe Rechteck::BerechneFlaeche auf dem Rechteck namens test auf (auch OK, geht aber kürzer: test.BerechneFlaeche() )

    form.Text=test.BerechneFlaeche().ToString(flaeche);
    

    Erstmal die Hälfte rechts vom Zuweisungsoperator:
    Rufe auf das Ergebnis der Methode BerechneFlaeche auf dem Rechteck namens test die Methode ToString auf und übergebe ihr die Kommazahl flaeche (die immernoch 0 ist).
    So und dieses ToString, welches eine Kommazahl als Parameter erwartet, gibt es nicht. Was Du willst ist test.BerechneFlaeche().ToString();
    Dieses wird form.Text zugewiesen.

    Alles in allem sieht der Block dann so aus:

    Rechteck test;
        Form1 form;
        float flaeche = 0;
        test.BerechneFlaeche();
        form.Text=test.BerechneFlaeche().ToString();
    

    Was uns noch zu dem Schluss bringt (bringen könnte), dass der erste Aufruf BerechneFlaeche() sinnlos ist, weil das Ergebnis ungenutzt bleibt. Ausserdem brauchen wir float flaeche garnicht.



  • hi.

    okay ich hab das soweit verstandne und übernommen.

    Rechteck test;
        Form1 form;
        float flaeche = 0;
        flaeche = test.BerechneFlaeche();
    /* kann ich das nicht flaeche zuweisen und dann würde doch ToString(flaeche) einen sinn ergeben oder? weil bei flaeche kommt ja ne gleitkommazahl heraus.*/
        form.Text=test.BerechneFlaeche().ToString();
    

    das compilieren geht soweit..aber ein echt seltsames fenster kommt da
    http://img496.imageshack.us/img496/3837/unbenannt6ki.jpg



  • Da in .NET alles ein Objekt ist müsste es auch bei einer float Variable tatsächlich flaeche.ToString() statt ToString(flaeche) heissen...

    Der Fehler kommt weil Du form.Text zu früh benutzt... In der letzten Zeile von main wird auch Form1 nochmal neu erzeugt, also geht Dein Text garnicht in das Formular was später angezeigt wird.

    Du solltest den Code in einer Methode innerhalb der Form schreiben, z.B. Form_Load (Doppelklick ins Formular im Designer erzeugt eine solche (hoffentlich auch in C++)) oder bei einem Button-Click etc...



  • hab das so gelöst das ich den code einfach unter

    Application::Run(gcnew Form1());
    

    geschrieben hab.

    sooo und wenn ich die Form grafisch vor mir habe und nen doppelklick auf das label1 mache, dann bin ich ja im code des label1.

    aber wie greif ich nu mit label1->Test=??? auf das zu was ich ausgelesen haben in der aufgabe2.cpp?

    danke!!!



  • hmm keiner ne idee? 😞


Anmelden zum Antworten