tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
373
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    moinsen,
    ich programmiere c++ erst seit ein paar tagen, stehe jetzt aber total auf dem schlauch. ich möchte einen string in mein struct einlegen, dies funktioniert aber leider nicht.


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    #include "stdafx.h"
     
     
    using namespace System;
     
    struct test
    {
          String ^lol;
    }ka[2];
     
    int main(array<System::String ^> ^args)
    {
          String ^str1="123";
          ka[0].lol = str1;
        Console::WriteLine(str1);
        return 0;
    }
    es kommt dann die fehlermeldung:"Ein verwalteter 'lol' kann nicht in einem nicht verwalteten 'test' deklariert werden"

    kann mir jemand helfen? danke schon mal :-P
     

  2. #2
    napstermania napstermania ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Ort
    Deutschland
    Beiträge
    95
    Hallo xlon,

    wie dein Kompiler schon sagt ahst du ein nicht Verwaltetes (unmanaged) struct angelegt, in dem du ein Verwalteten (managed) Datentyp deklarieren willst. Das kann so nicht funktionieren. Das dein String Datentyp managed ist siehst du an dem '^'. Damit der Kompiler deine Code frisst musst du das struct ebenfalls managed deklarieren. Das machst ein fach in dem du ein "typedef __gc" davor setzt. Habe es jetzt nicht getestet aber so soltle es funktionieren.

    Mfg
     

  3. #3
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    Hi,
    danke für deine antwort.

    leider funktioniert es nicht ganz.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    typedef__gc struct test
    {
          String ^lol;
    }ka[2];
     
    int main(array<System::String ^> ^args)
    {
          String ^str1="123";
          ka[0].lol = str1;
        Console::WriteLine(str1);
        return 0;
    }

    warum muss denn da __gc noch dahin? aber auch ohne funktioniert es leider nicht. weißt du vllt woran es liegt?
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von napstermania Beitrag anzeigen
    Das dein String Datentyp managed ist siehst du an dem '^'. Damit der Kompiler deine Code frisst musst du das struct ebenfalls managed deklarieren. Das machst ein fach in dem du ein "typedef __gc" davor setzt. Habe es jetzt nicht getestet aber so soltle es funktionieren.
    Das typedef __gc ist ja sowas von Old School

    Ein managed struct kann mit dem Schlüsselwort ref deklariert werden:
    Code cpp:
    1
    2
    3
    
    ref struct Blah {
      ...
    }
    Siehe http://msdn.microsoft.com/en-us/libr...05cplus_topic8

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    ja super...das hat jetzt soweit geklappt...nur das ich jetzt kein array mehr mit der struct habe.
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Arrays von managed Typen kann man so anlegen:
    Code cpp:
    1
    
    array<test^> ein_array = gcnew array<test^>(5);
    Siehe z.B. http://www.codeproject.com/KB/mcpp/cppcliarrays.aspx

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    danke für deine antwort deepthroat,

    leider ging es so wie du es beschrieben hat nicht ganz.

    ich habe jetzt also eine struct was ca so aussieht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    ref struct Pings
        {
            String ^name;
            String ^adr;
            int max_latenz;
     
            int ping1, ping2,ping3,ping4,ping5;
        };

    da ich davon mehrere brauche, brauche ich ein array. ganz normal ging es nicht...

    dann hab ich in meiner funktion:
    Code :
    1
    
    array<Pings^> test = gcnew array<Pings^>(5);
    eingefügt.
    dann kommt aber folgende fehler meldung :
    Code :
    1
    
    Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.

    dann habe ich es so probiert:
    Code :
    1
    
    array<Pings^> ^test = gcnew array<Pings^>(5);

    wo dann 16 fehler kommen.
    Code :
    1
    
    Links von ".name" muss sich eine Klasse/Struktur/Union befinden.
    Code :
    1
    
    Links von ".max_latenz" muss sich eine Klasse/Struktur/Union befinden.
    usw.


    gebraucht werden alle so:

    Code :
    1
    
    test[0].name = lesen->GetString(1);

    vielen dank schonmal
     

  8. #8
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    Update:

    jetzt hab ich es mal so probiert:

    Code :
    1
    
    test[0]->name = lesen->GetString(1);

    dann geht es...aber nur bis zur stelle...dann stürzt er ab.

    Code :
    1
    2
    3
    
    Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in PingTool_Dienst.exe aufgetreten.
     
    Zusätzliche Informationen: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
     

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Richtig. Das Array selbst muss auch verwaltet sein (also mit ^).

    Das Array enthält nachdem es kreiert wurde nur leere Eintrage (nullptr).

    Du mußt das Array erst noch füllen bevor du auf die Elemente zugreifen kannst:
    Code cpp:
    1
    2
    
    test[0] = gcnew Pings();
    test[0]->name = lesen->GetString(1);
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    ich glaub bald haben wirs :-D
    ich habe jetzt noch
    Code :
    1
    2
    
    test[0] = gcnew Pings();
    test[0]->name = lesen->GetString(1);
    eingefügt...

    jetzt kommt aber noch folgende fehlermeldung:
    Code :
    1
    
    error C2440: '=': 'Pings ^' kann nicht in 'cli::array<Type> ^' konvertiert werden
     

  11. #11
    xlon xlon ist offline Mitglied Silber
    Registriert seit
    Jun 2009
    Beiträge
    92
    sorry...ich weiß nicht was ich da gesehen habe oO...

    funktioniert natürlich alles...

    vielen dank!
     

  12. #12
    napstermania napstermania ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Ort
    Deutschland
    Beiträge
    95
    Das typedef __gc ist ja sowas von Old School
    Ja ja ich komm halt aus der C# ecke und habe mit managed C++ selten gearbeitet. Das war noch mein letzter Wissensstand, aber gut das mal zu wissen
     

Ähnliche Themen

  1. c++ strings
    Von xlon im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 06.04.10, 12:27
  2. Antworten: 2
    Letzter Beitrag: 17.05.08, 10:40
  3. Strings in C
    Von Ozzy Ozborn im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 30.04.08, 22:31
  4. strings
    Von Irgendjemand_1 im Forum C/C++
    Antworten: 18
    Letzter Beitrag: 05.09.05, 12:42
  5. Antworten: 7
    Letzter Beitrag: 09.02.05, 20:42