std::string na system::string^ błąd

0

witam, mam spory problem... potrzebuje przekonwertować jak w temacie std::string na system::string^. znalazłem nawet sporo tematów jak do tego dojść i powiedzmy, że mi się udało skompilować program bez błędów. niestety jak skorzystam z funkcji, która już to realizuje, dostaje dużego errora: ** _BLOCK_TYPE_IS_VALID(phead->nBlockUse) - assertion faliure** i nie wiem jak już tego się pozbyć...

funkcja, która u mnie się tym bawi wygląda następująco:

 void wyswietl(graf obiekt)
	{
		int i, j;
		
		string str;
		
		
		for(i = 0; i < obiekt.size; ++i)
		{
			this->textBox3->AppendText("\n");
			for(j = 0 ; j < obiekt.size; ++j)
			{
				ostringstream ss;
				ss << obiekt.best[i][j];
				str = ss.str();

				String ^out2 = gcnew String(str.c_str());
				 this->textBox3->AppendText(out2);
				 this->textBox3->AppendText("    ");
			}
		}
	}

wiem, że nie jest to piękny kod, ale potrzebuje to zrobić. na forum mieliście jakieś tematy o konwersji, które znalazłem przy pomocy "Szukaj". nie wiem czemu jednak linki .... nie działały czy coś... jak wchodziłem na nie.. to nie pojawiały mi się żadne tematy...
jeżeli wiecie jak zrobić to, aby zadziało (znaczy konwersja), to podzielcie się wiedzą.

0

Nie chcę mi się póki co wgłębiać w tek "kod" ale po co to konwenterować ?? Nie możesz od razu zapisać do String^.
Do czego to jest Ci potrzebne?

0

Jaki to język?

0

C++/CLI

0
String ^out2 = gcnew String(str.c_str());

konwertujesz dobrze. błąd jest w czymś innym.

0

dotarłem do błędu... powiedzmy... destruktor, który miałem zadeklarowany powodował błędy. dokładnie nie wnikałem jaki błąd, bo zależy mi na czasie. poza tym w c++ chyba istnieje jakiś domyślny destruktor, wiec usunąłem po prostu swój.

0
radical_edo napisał(a)

dotarłem do błędu... powiedzmy... destruktor, który miałem zadeklarowany powodował błędy. dokładnie nie wnikałem jaki błąd, bo zależy mi na czasie. poza tym w c++ chyba istnieje jakiś domyślny destruktor, wiec usunąłem po prostu swój.

Czy ty wiesz, że pytasz o c++/cli, a nie c++?

0

Microsoft stara się zaciemniać sprawę i reklamuje to po prostu jako C++.

0

Microsoft napisał dobre IDE do C++. Można w nim bez problemu włączyć tryb CLI i dzięki temu uzyska się dostęp do wielu ułatwiających życie klas .NETowych. A nierozróżnianie jednego od drugiego to już nie wina Microsoftu...

0

no dobra, to powiedzmy, ze nie wiem, ze to dwie osobe sprawy... choc z drugiej strony piszecie c++/cli, czyli jednak wykorzystuje to c++ a w cli tworzone sa okienka. to ja juz sie gubie... jaka jest ta roznica?

prawda taka, ze najpierw pisalem w czsytym c++, potem nagle sie okazalo, ze trzeba "upiekszyc" program, niestety nie chcialo mi sie do tej pory obcykac qt, a .net byl pod reka... no to rzucilem sie na to (mialem jeszcze lekka stycznosc z tym... ale nic powaznego i bardziej pod c#)

0

Różnica jest olbrzymia. Gdybym był złośliwy to napisałbym że taka jak między samą karoserią samochodu a samochodem właśnie :> ale to nieprawda.

Nie ma szans tego wszystkiego opisać w jednym poście, ale ogólnie rzecz ujmując, to są dwa zupełnie różne języki. W Visual studio piszesz w czystym C++ - dopóki nie zaznaczysz w opcjach kompilacji że chcesz inaczej. Wtedy ze zwykłego c++ język zmienia się na C++\CLI - jest to już jeden z języków platformy .NET.

Zaletą tego jest między innymi to że ma się dostęp do olbrzymiej gamy klas tej platformy, na przykład właśnie okien których używasz. Wady pominiemy :D .
A cechą uboczną są dziwnostki składniowe. Języki platformy .NET są wysokopoziomowe i operuje się tam praktycznie tylko na zarządzanych (managed) referencjach. Zresztą wiesz o tym bo sam piszesz że używałeś C#. Znaczek ^ oznacza wskaźnik CLR-owy, a % - referencję CLR-ową. Nie musisz jej na przykład zwalniać, tym zajmie się sam komputer (a dokładnie składnik maszyny wirtualnej, proces GC).

Mam nadzieję że chociaż trochę rozjaśniłem. Myślę że szybciej nauczyłbyś się QT niż w miarę zrozumiał CLI. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1