Announcement

Collapse
No announcement yet.

Handle an Funktion und zurück

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Handle an Funktion und zurück

    Hallo zusammen,
    ich versuche gerade vergeblich einen Handle von einer Funktion an main()
    zurückzuliefern. von main() nach Funktion geht.
    Irgenwas mach ich mit dem Rückgabetyp verkehrt glaube ich.

    [highlight=c++]
    ref struct listenelement {
    String ^daten;
    listenelement ^next;
    };

    listenelement anhaengen(String ^datenneu, listenelement ^listenende) {
    //ein Hilfshandle zum Wandern in der Liste
    listenelement ^hilfsHandle;

    //Hilfshandle an das Ende der Liste setzen
    hilfsHandle = listenende;

    //Neues Element am Ende der Liste anhängen
    hilfsHandle->next = gcnew listenelement;

    //Hilfshandle auf das neue Element setzen
    hilfsHandle = hilfsHandle->next;

    //Zeichenkette im neuen Element eintragen
    hilfsHandle->daten=datenneu;
    //nullptr wird automatisch zugewiesen!

    listenende = hilfsHandle->next;

    return listenende;
    }
    [/highlight]

    Gruß
    Andreas
    Zuletzt editiert von andreas-hafner; 11.02.2010, 00:42.

  • #2
    listenende ist nirgendwo deklariert??

    Was für ein Fehler kommt?
    Zuletzt editiert von Christian Marquardt; 11.02.2010, 08:18.
    Christian

    Comment


    • #3
      Hallo,
      hier die Fehlermeldung:

      1>------ Erstellen gestartet: Projekt: e05_1, Konfiguration: Debug Win32 ------
      1>Kompilieren...
      1>e05_1.cpp
      1>.\e05_1.cpp(36) : error C2440: 'return': 'listenelement ^' kann nicht in 'listenelement' konvertiert werden
      1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
      1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
      1>.\e05_1.cpp(81) : error C2440: '=': 'listenelement' kann nicht in 'listenelement ^' konvertiert werden
      1> Es ist kein benutzerdefinierter Konvertierungsoperator verfügbar, oder
      1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
      1>Das Buildprotokoll wurde unter "file://d:\Users\Andi\Documents\Visual Studio 2008\Projects\e05_1\e05_1\Debug\BuildLog.htm" gespeichert.
      1>e05_1 - 2 Fehler, 0 Warnung(en)
      ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

      und hier noch mal der ganze Quelltext:

      [highlight=c++]
      // e05_1.cpp: Hauptprojektdatei.

      /* #################################################
      e05_1
      ################################################# */

      #include "stdafx.h"

      using namespace System;

      ref struct listenelement {
      String ^daten;
      listenelement ^next;
      };

      //neues Element am Ende der Liste anhängen
      listenelement anhaengen(String ^datenneu, listenelement ^listenende) {
      //ein Hilfshandle zum Wandern in der Liste
      listenelement ^hilfsHandle;

      //Hilfshandle an das Ende der Liste setzen
      hilfsHandle = listenende;

      //Neues Element am Ende der Liste anhängen
      hilfsHandle->next = gcnew listenelement;

      //Hilfshandle auf das neue Element setzen
      hilfsHandle = hilfsHandle->next;

      //Zeichenkette im neuen Element eintragen
      hilfsHandle->daten=datenneu;
      //nullptr wird automatisch zugewiesen!

      listenende = hilfsHandle->next;

      return listenende;
      }

      //Alle Elemente der Liste ausgeben
      Void ausgeben(listenelement ^listenanfang) {
      //ein Hilfshandle zum Wandern in der Liste
      listenelement ^hilfsHandle;

      hilfsHandle = listenanfang;

      //erstes Element ausgeben
      Console::WriteLine("{0}",hilfsHandle->daten);

      //Solange das Ende der Liste noch nicht erreicht ist:
      //hilfshandle auf das nächste Element setzen und die Daten ausgeben
      while (hilfsHandle->next != nullptr) {
      hilfsHandle = hilfsHandle->next;
      Console::WriteLine("{0}",hilfsHandle->daten) ;
      }
      }

      int main(array<System::String ^> ^args)
      {
      //Handle auf den Anfang der Liste
      listenelement ^listenanfang;
      //Handle auf das Ende der Liste
      listenelement ^listenende;

      //das erste Element per Hand erzeugen
      listenanfang = gcnew listenelement;
      //Zeichenkette in das erste Element schreiben
      //nullptr wird automatisch gesetzt
      listenanfang->daten="Element 1";

      //Listenende ermitteln
      listenende = gcnew listenelement;
      listenende = listenanfang;
      while (listenende->next != nullptr)
      listenende = listenende->next;



      //in einer Schleife mehrere Elemente einfügen
      for (Int32 schleife=2;schleife<4;schleife++)
      {
      listenende->next = anhaengen("Element "+schleife,listenende);
      listenende = listenende->next;
      }

      //die Liste ausgeben
      ausgeben(listenanfang);

      return 0;
      }
      [/highlight]

      Liebe Grüße
      Andreas

      Comment


      • #4
        'return': 'listenelement ^' kann nicht in 'listenelement' konvertiert werden


        Der Rückgabeparameter muss vom Typ ^listenelement sein. Mit dem MS Geraffel kenne ich micht nicht aus.

        Wenn es geht müsste die Methode

        ^listenelement anhaengen....

        deklariert werden
        Christian

        Comment


        • #5
          Dann krieg ich diese Meldungen das hatte ich auch schon versucht:

          1>------ Erstellen gestartet: Projekt: e05_1, Konfiguration: Debug Win32 ------
          1>Kompilieren...
          1>e05_1.cpp
          1>.\e05_1.cpp(17) : error C2226: Syntaxfehler: Typ 'listenelement' nicht erwartet
          1>.\e05_1.cpp(17) : error C2143: Syntaxfehler: Es fehlt ';' vor '{'
          1>.\e05_1.cpp(17) : error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
          1>.\e05_1.cpp(81) : error C3861: "anhaengen": Bezeichner wurde nicht gefunden.
          1>Das Buildprotokoll wurde unter "file://d:\Users\Andi\Documents\Visual Studio 2008\Projects\e05_1\e05_1\Debug\BuildLog.htm" gespeichert.
          1>e05_1 - 4 Fehler, 0 Warnung(en)
          ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


          Ich find aber auch nichts im Internet darüber oder MSDN Libary wie ich Handles als Rückgabetyp bei Funktionen angeben kann.
          Bitte sagt mir aber keiner das dass nicht geht!?

          Gruß
          Andreas

          Comment


          • #6
            Das hat nichts mit Handle zu tun, sondern ist dem mirocsoft C++ Dialekt geschuldet der sowas

            ^

            macht. Ich zumindestens weiss nicht was das Zeichen bewirkt

            Weiterhin könnte das Problem sein, dass

            ref struct listenelement

            dieses Zeichen nicht hat. Bei der Parameterdefinition allerdings listenelement ^listenende steht. Mal

            listenelement listenende probieren
            Christian

            Comment


            • #7
              Thema erledigt

              Hab es nun doch hingekriegt nach einem Tipp eines anderen Forums.
              ich musste listenelement^ anhaengen schreiben und nicht listenelement oder ^listenelement.

              Danke trotzdem für die Antwort.

              Gruß
              Andreas

              Comment

              Working...
              X