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

2016-11-11 16:53

Rejestracja: 3 lata temu

Ostatnio: 3 lata temu

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.

edytowany 1x, ostatnio: furious programming, 2016-11-11 21:38
Urzekłeś mnie tym tytułem :D - Burdzi0 2016-11-11 17:07

Pozostało 580 znaków

2016-11-12 00:00

Rejestracja: 4 lata temu

Ostatnio: 4 miesiące temu

Lokalizacja: Pabianice

0

Cannot convert 'wchar_t ' to 'const char '

Jak dla mnie to przekazujesz niezgodny z oczekiwaniem typ.


Pozostało 580 znaków

git
2016-11-12 09:21
git

Rejestracja: 3 lata temu

Ostatnio: 5 miesięcy temu

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.

1.
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.

2.
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ł.

edytowany 1x, ostatnio: git, 2016-11-12 09:50

Pozostało 580 znaków

2016-11-12 12:03

Rejestracja: 4 lata temu

Ostatnio: 17 godzin temu

0

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

Pozostało 580 znaków

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