c++ strings

xlon

Mitglied
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:
#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
 
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
 
Hi,
danke für deine antwort.

leider funktioniert es nicht ganz.

Code:
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?
 
Hi.
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:
C++:
ref struct Blah {
  ...
}
Siehe http://msdn.microsoft.com/en-us/library/ms379617(VS.80).aspx#vs05cplus_topic8

Gruß
 
ja super...das hat jetzt soweit geklappt...nur das ich jetzt kein array mehr mit der struct habe.
 
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:
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:
array<Pings^> test = gcnew array<Pings^>(5);
eingefügt.
dann kommt aber folgende fehler meldung :
Code:
Dieser Typ kann ohne "^" der obersten Ebene hier nicht verwendet werden.

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

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


gebraucht werden alle so:

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

vielen dank schonmal :)
 
Update:

jetzt hab ich es mal so probiert:

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

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

Code:
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.
 
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:
C++:
test[0] = gcnew Pings();
test[0]->name = lesen->GetString(1);
Gruß
 
ich glaub bald haben wirs :-D
ich habe jetzt noch
Code:
test[0] = gcnew Pings();
test[0]->name = lesen->GetString(1);
eingefügt...

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