c_str(), które kiedyś działało

0

Witam.
Mam problem z c_str(). Kod mojego programu, był tworzony bodajże pod C++ Builder 2007. Program działał prawidłowo. Chce ten sam kod uruchomić na obecnie najnowszej wersji środowiska: C++Builder 10.1 Berlin.

#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
#include "Unit2.h"
#include <math.h>
#include <fstream.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;

Ta linijka:
1:

MessageBox(Handle,("Twój wynik został zapisany do katalogu " + Label10->Caption).c_str(), "", MB_OK | MB_ICONINFORMATION);

Wyrzuca takie błędy:

[bcc32 Error] Unit3.cpp(144): E2034 Cannot convert 'wchar_t *' to 'const char *'
[bcc32 Error] Unit3.cpp(144): E2342 Type mismatch in parameter 'lpText' (wanted 'const char *', got 'wchar_t *')

Gdy to zakomentuję to mam problem z kodem(kompilator nie wyrzuca błędów,ale kod działa niepoprawnie):

2:
Te poniższe 2 linijki działają prawidłowo...,

ofstream outfile;
outfile.open(("Wyniki\\"+Label10->Caption+"\\"+i+".txt").c_str());

...ale kolejne nie:

 outfile <<("Poziom trudności: "+Label12->Caption).c_str(); 
 outfile<<endl;
 outfile <<("Ilość poprawnych odpowiedzi w procentach: "+ Label4->Caption+" %").c_str();
 outfile<<endl;
 outfile <<("Ilość wykonanych działań: "+Label17->Caption).c_str() ;
 outfile<<endl;

Wynik powyższych linijek:

245acbc
245a15c
24eb214

Gdy w labelu jest liczba poradziłem sobie(obszedłem problem), korzystając z funkcji StrToInt, ale z napisem nie mogę sobie poradzić.

Bardzo proszę o pomoc. Kombinuje i kombinuje i nadal nie działa. Proszę o podanie kodu.

0

Cannot convert 'wchar_t *' to 'const char *'

Jak dla mnie to przekazujesz niezgodny z oczekiwaniem typ.

0

Witam.

Uwaga ogólna
Takie coś - "jakiś napis" - jest typu const char*. Jeśli w łańcuchach znaków używasz znaków spoza zakresu ASCII, to radzę Ci podawać napisy w ten (L"jakiś napis") lub ten (_T("jakiś napis")) sposób. Takie łańcuchy mają typ wchar_t*. Jeśli będziesz stosował się do tej zasady, to Twój program odpalony nawet na chińskim windowsie prawidło pokaże polskie znaki.

Drugi i trzeci argument MessageBox jest typu LPCTSTR. Skoro dostajesz taki błąd kompilacji, to LPCTSTR musi być u Ciebie zdefiniowane jako LPCSTR. A to by znaczyło, że nie masz zdefiniowanego defina UNICODE.

ofstream to basic_ofstream<char>. Jeśli działasz na wchar_t*, to używaj wofstream czyli basic_ofstream<wchar_t>.

EDIT:
No chyba, że nie chcesz używać UNICODU, to wtedy musisz pozamieniać wszystkie Stringi odczytane z Labeli na AnsiStringi i to powinno wystarczyć do tego, żeby kod się skompilował.

0

@git ewentualnie niech od razu użyje funkcji MessageBoxW Wtedy kod będzie się ładnie kompilował nawet bez ustawionego defa UNICODE.

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