ďťż

Ł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
  •