Ĺadny brzuch
Witam!
Mam trochę głupi problem, bo nie moge połączyć dwóch łańcuchów znaków :P Jak zrobie coś takiego:
for (int i=0; i<tests; i++) { name = "test" + IntToStr(i); GetPrivateProfileString("tests", name.c_str(), "1", buf, 255, "./testy/tests.ini"); cbTesty->Items->Add(buf); }
To wyskakuje błąd:
[C++ Error] tester.cpp(31): E2285 Could not find a match for 'string::operator =(AnsiString)'
Błąd odnosi się do instrukcji
name = "test" + IntToStr(i)
Specjalnie przeszukałem Symfonię, żeby sprawdzić czy dobrze łącze łańcuchy :P Więc czemu to nie działa?
moim zdaniem probojesz dolaczyc do zmiennej string zmienna Char - a to raczej nie wyda . IntToStr(i) daje w rezultacie zmienna Char - przeksztalc to na Pchar lub string i moze zadziala , lub skorzystaj z ktorejs z funkcji np: Strcpy() lub innej.
Następnym razem może napisz jakiego programu używasz. W każdym razie, jeśli jest to BCB to masz kilka możliwości. Oto niektóre z nich:
1. Zacznij czytać co pisze kompilator i zmień typ name na AnsiString.
2. Zacznij czytać co pisze kompilator i napisz
name = "tekst"; name += IntToStr.c_str();
3. Użyj tablicy char'ów od razu.
Użytkownik Chmurek edytował ten post 09 luty 2006, 10:26
Czym u Ciebie jest "name"?
Też się chciałem doczepić, że nie napisał, ale po komunikacie błędu widać, że string. ;)
Też się chciałem doczepić, że nie napisał, ale po komunikacie błędu widać, że string. ;)
Pisze w Borlandzie 6. Może pokaże cały kod to będzie łatwiej:
char buf[255]; string name; int tests; GetPrivateProfileString("main", "tests", "1", buf, 255, "./testy/tests.ini"); tests = 3; // Tutaj chciałem przypisać to co zostało wyciągnięte z pliki INI funkcją GetPrivateProfileString, ale też występowały jakieś konfilkty typów :( for (int i=0; i<tests; i++) { name = "test" + IntToStr(i); GetPrivateProfileString("tests", name.c_str(), "1", buf, 255, "./testy/tests.ini"); cbTesty->Items->Add(buf); }
1. Zamień string na String.
2. Zamień "/" na "\\" ;)
A nie prosciej skorzystac z klasy TIniFile?
#include <IniFiles.hpp>
TiniFile *plik = new TIniFile(Application->FileName + "testy//tests.ini");
AnsiString text = plik->ReadString("tests", name, "jesli nie odczyta to zwroc ten text");
@Cyrkiel Jejku nie wiedziałem że wielkość jednej literki robi taką różnice :P
@Fifle87 A no można i tak :) Jakoś nie słyszałem wcześniej o tej klasie.
Dzięki wszystkim za pomoc! :)
Kodie: Wystarczyłoby, żebyś przeczytał to co kompilator napisał zanim zacząłeś pisać. ;)
Tekst "Could not find a match for 'string::operator =(AnsiString)'" oznacza przecież, że nie znalazł w klasie string odpowiedniej funkcji.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Mam trochę głupi problem, bo nie moge połączyć dwóch łańcuchów znaków :P Jak zrobie coś takiego:
for (int i=0; i<tests; i++) { name = "test" + IntToStr(i); GetPrivateProfileString("tests", name.c_str(), "1", buf, 255, "./testy/tests.ini"); cbTesty->Items->Add(buf); }
To wyskakuje błąd:
[C++ Error] tester.cpp(31): E2285 Could not find a match for 'string::operator =(AnsiString)'
Błąd odnosi się do instrukcji
name = "test" + IntToStr(i)
Specjalnie przeszukałem Symfonię, żeby sprawdzić czy dobrze łącze łańcuchy :P Więc czemu to nie działa?
moim zdaniem probojesz dolaczyc do zmiennej string zmienna Char - a to raczej nie wyda . IntToStr(i) daje w rezultacie zmienna Char - przeksztalc to na Pchar lub string i moze zadziala , lub skorzystaj z ktorejs z funkcji np: Strcpy() lub innej.
Następnym razem może napisz jakiego programu używasz. W każdym razie, jeśli jest to BCB to masz kilka możliwości. Oto niektóre z nich:
1. Zacznij czytać co pisze kompilator i zmień typ name na AnsiString.
2. Zacznij czytać co pisze kompilator i napisz
name = "tekst"; name += IntToStr.c_str();
3. Użyj tablicy char'ów od razu.
Użytkownik Chmurek edytował ten post 09 luty 2006, 10:26
Czym u Ciebie jest "name"?
Też się chciałem doczepić, że nie napisał, ale po komunikacie błędu widać, że string. ;)
Też się chciałem doczepić, że nie napisał, ale po komunikacie błędu widać, że string. ;)

Pisze w Borlandzie 6. Może pokaże cały kod to będzie łatwiej:
char buf[255]; string name; int tests; GetPrivateProfileString("main", "tests", "1", buf, 255, "./testy/tests.ini"); tests = 3; // Tutaj chciałem przypisać to co zostało wyciągnięte z pliki INI funkcją GetPrivateProfileString, ale też występowały jakieś konfilkty typów :( for (int i=0; i<tests; i++) { name = "test" + IntToStr(i); GetPrivateProfileString("tests", name.c_str(), "1", buf, 255, "./testy/tests.ini"); cbTesty->Items->Add(buf); }
1. Zamień string na String.
2. Zamień "/" na "\\" ;)
A nie prosciej skorzystac z klasy TIniFile?
#include <IniFiles.hpp>
TiniFile *plik = new TIniFile(Application->FileName + "testy//tests.ini");
AnsiString text = plik->ReadString("tests", name, "jesli nie odczyta to zwroc ten text");
@Cyrkiel Jejku nie wiedziałem że wielkość jednej literki robi taką różnice :P
@Fifle87 A no można i tak :) Jakoś nie słyszałem wcześniej o tej klasie.
Dzięki wszystkim za pomoc! :)
Kodie: Wystarczyłoby, żebyś przeczytał to co kompilator napisał zanim zacząłeś pisać. ;)
Tekst "Could not find a match for 'string::operator =(AnsiString)'" oznacza przecież, że nie znalazł w klasie string odpowiedniej funkcji.