Getting started - meine allererste Frage zum VC++ Express Edition



  • Es reicht:

    Label1.Text = "gedrückt";
    

    Oder was kommt den für ein Fehler?

    @MOD: => C++/CLI



  • Hallo Jochen,

    im 5. Beitrag dieses Threads steht die Fehlermeldung, die beim Compilieren auftritt und einen Beitrag vor Deinem letzten posting ist der ganze Quellcode von dem vom System erzeugten Programm!

    Danke für Deine Hilfe!

    Gruß

    Micha



  • Ach so... stehe gerade auch auf der Leitung... muss natürlich wie folgt heissen:

    label1->Text = "gedrückt";
    


  • Es ist zum Verzweifeln!

    Nun habe ich ganz langsam - Schritt für Schritt - alles nachgemacht, was die da in der Hilfe zu ihrem Beispielprogramm schreiben. Aber es tut sich nichts!

    Hier mal ein Auszug aus der Hilfeseite
    "Visual C++ Expression Edition/Beispiele/Allgemeine Beispiele/Calculator-Beispiel...":
    -----------------------------------------------------------
    Erstellen und Ausführen des Beispiels
    So können Sie die Calculator-Projektmappe mithilfe von Visual Studio erstellen und ausführen
    Laden Sie in der Visual Studio-IDE die Projektmappendatei calc.sln.

    Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe Calc.

    Klicken Sie im Kontextmenü auf Erstellen.

    Hinweis
    Da dieses Programm die Symboldatei (calc.ico) nicht in eine XML-basierte Ressourcendatei (*.resx) kompiliert, müssen Sie vor dem Fortfahren die Symboldatei in dasselbe Verzeichnis wie .exe (aus dem Beispiel erstellt) kopieren.

    Führen Sie die resultierende Anwendung aus, und probieren Sie verschiedene Rechenoperationen mit dem Taschenrechner aus.
    ----------------------------------------------------------------------
    Ende Auszug

    Habe ich gemacht, aber ich finde zum einen keine *.exe-Datei und außerdem startet kein Taschenrechnerprogramm!

    Ich zweifel langsam an mir!



  • Jochen Kalmbach schrieb:

    Ach so... stehe gerade auch auf der Leitung... muss natürlich wie folgt heissen:

    label1->Text = "gedrückt";
    

    habe ich auch schon probiert, geht aber auch nicht!

    hier noch mal die Meldungen:

    1>------ Erstellen gestartet: Projekt: Test3, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>MeinFormular.cpp
    1>d:\dokumente\visual_c++\test3\test3\MeinFormular.h(105) : error C2065: 'Label1': nichtdeklarierter Bezeichner
    1>d:\dokumente\visual_c++\test3\test3\MeinFormular.h(105) : error C2227: Links von "->Text" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    1> Typ ist ''unknown-type''
    1>Das Buildprotokoll wurde unter "file://d:\Dokumente\Visual_C++\Test3\Test3\Debug\BuildLog.htm" gespeichert.
    1>Test3 - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



  • Nein, hast Du nicht probiert... C++ ist case-sensitive, somit musst Du

    label1
    

    und nicht

    Label1
    

    verwenden!



  • ok, nun ist der Compiler durchgelaufen! Also lag es daran, dass ich die Groß/Kleinschreibweise nicht beachtet habe! Danke!

    Nun aber bin ich ganz verwundert, warum ich nach "Starten ohne Debuggen" und ohne Fehler mein Formular nicht sehe! Ich sehe es nur in der Entwurfsansicht.

    Aber ich wollt sie gern mal testen, meine kleine Ereignisprozedur!

    Wo könnte das Formular hin sein?



  • Dieser Thread wurde von Moderator/in dEUs aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • OK, die Antwort ist jetz ein wenig weitreichender (hab ich irgendwann auch mal schmerzlich lernen müssen...).

    Also, dass, was du irgendwo als Label1 findest, is nehme ich mal stark an ein Zeiger, dass ist sowas ähnliches wie ein Datentyp (in C/C++ u.a. gibts nur 4Typen: int, char (=1Zeichen), double (für Kommazahlen) und void (kein echter datentyp, entspricht in VB der sog. Sub). Alle anderen Typen sind irgendwie aus den drei ersten Grundtypen abgeleiet). Die Zeiger (engl. Pointer) sind jetz nicht eine Variable/Objekt/... sondern sie sagen dem Rechner nur, wo er diese Variable/... im RAM findet, der Zeiger gibt also die Speicheradresse zurück (also nur der Ort, wo das eigtl. Objekt zu finden ist, nicht aber das Objekt selber). Dadurch ist es natürlich sehr viel schneller machbar, auf das eigtl. Objekt zurückzureifen, weil man weiß, wo es überhaupt im RAM rumliegt.

    So, was hat das ganze mit unserem Label zu tun: Label1 ist wie gesagt nur ein Zeiger auf das eigtl. Objekt "Label". Das hat zwei Vorteile: 1. man findet es schnell im Ram, 2. man muss nicht dauernd (wenn man irgendwann man in Verlegenheit kommen sollte, das Objekt "Label" an eine Funktion zu übergeben, z.B. damit es in dieser Funktion weiterverarbeitet werden kann) das komplette Objekt übergeben, was abhängig von Objektgröße ziemlich lange dauern kann - alles wertvolle Rechnerzeit - sondern man sagt dem Prozi nur, wo das Label rumliegt und schwups hat er Zugriff auf sämtliche Eigenschaften desselben. Und da kommt nun der Punkt ins Spiel: bei Zeigern kann man um auf die versch. Eigenschaften (=Properties) und Methoden zurückzugreifen nicht mit dem Punkt-Operator arbeiten, sondern tut das über den Zeiger-Operator -> (darum heußt das Ding auch Zeiger, sieht ja so ähnlich aus). Probier also - und jetz komme ich zum wichtigen Teil - einfach folgendes: Label1->Text = "Die eigenschaft Text muss im Übrigen Groß geschrieben werden, da C++ auf Groß- und Kleinschreibung achtet (anders als das "benutzerfreundliche" VB^^.

    So, das war jetz mal genuch des Ganzes, viel Glück damit...



  • Leider alles nur Halbwissen... Und leider habe ich keine Zeit es richtig zu stellen. Ich hoffe das übernimmt jemand anderes für mich.



  • Dann versuch ich mich mal 😉

    Carschtn schrieb:

    Also, dass, was du irgendwo als Label1 findest, is nehme ich mal stark an ein Zeiger, dass ist sowas ähnliches wie ein Datentyp

    Sowas ähnliches? Zeiger sind Datentypen, und label1 dürfte, da C++/CLI, ein Tracking Handle sein. Das ist das referenzgezählte, müllgesammelte Äquivalent zu einem nackten Zeiger.

    (in C/C++ u.a. gibts nur 4Typen: int, char (=1Zeichen), double (für Kommazahlen) und void (kein echter datentyp, entspricht in VB der sog. Sub). Alle anderen Typen sind irgendwie aus den drei ersten Grundtypen abgeleiet).

    char, short, int, long, float, double, alle Modifikationen davon und Zeiger, sowie void sind alles Grundtypen.

    Die Zeiger (engl. Pointer) sind jetz nicht eine Variable/Objekt/... sondern sie sagen dem Rechner nur, wo er diese Variable/... im RAM findet, der Zeiger gibt also die Speicheradresse zurück (also nur der Ort, wo das eigtl. Objekt zu finden ist, nicht aber das Objekt selber). Dadurch ist es natürlich sehr viel schneller machbar, auf das eigtl. Objekt zurückzureifen, weil man weiß, wo es überhaupt im RAM rumliegt.

    Zum einen sind Zeiger auch Variablen, sie haben eine eigene Speicherstelle, und sie haben einen Inhalt. Der Inhalt ist halt selbst wieder eine Adresse, an der Daten anderen Typs liegen können. Zum anderen frage ich mich, wie man auf "nicht-Zeiger" Variablen überhaupt zugreifen soll, wenn "man" nicht weiß, wo sie im RAM rumliegen 😕

    1. man findet es schnell im Ram,

    Siehe oben. Genaugenommen kann der Zugriff auf Objekte (ggü. Zeigern-auf-Objekte) sogar schneller sein, weil keine Indirektion erforderlich ist.

    2. man muss nicht dauernd (wenn man irgendwann man in Verlegenheit kommen sollte, das Objekt "Label" an eine Funktion zu übergeben, z.B. damit es in dieser Funktion weiterverarbeitet werden kann) das komplette Objekt übergeben, was abhängig von Objektgröße ziemlich lange dauern kann - alles wertvolle Rechnerzeit - sondern man sagt dem Prozi nur, wo das Label rumliegt und schwups hat er Zugriff auf sämtliche Eigenschaften desselben.

    Man kann auch Zeiger und Referenzen auf Objekte bilden und diese übergeben.



  • [quote="LordJaxom"]
    ...
    Das ist das referenzgezählte, müllgesammelte Äquivalent zu einem nackten Zeiger.
    ...
    [quote]
    Na endlich mal einer, der es auf den Punkt bringt. 👍 🙂


Anmelden zum Antworten