Witam, pisząc pewien projekt w C++ Builder natknąłem się na bardzo dziwny błąd którego mimo licznych prób i poszukiwań odpowiedzi w google nie udało się rozwiązać. Otóż ów projektem miała być prosta okienkowa wersja popularnej gry w "Państwa i Miasta" i o ile sama aplikacja się kompiluje i włącza to w momencie sprawdzania odpowiedzi gracza wyskakuje dziwny błąd co do którego przyczyny nie mam pojęcia.
Po wciśnięciu klawisza "OK" odsyła mnie metody w bibliotece dstring.h w miejscu zaznaczone komentarzem "BŁĄD".
char& __fastcall operator [](const int idx)
{
*/ BŁĄD */ ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??
Unique(); // Ensure we're not ref-counted
return Data[idx-1];
}
Do przechowywania odpowiedzi graczy i do ich sprawdzania wykorzystuję poniższą klasę oraz jej metodę .
class player
{ public:
//Zmienne :
int punkty;
AnsiString panstwo;
AnsiString miasto;
AnsiString zwierze;
AnsiString roslina;
AnsiString imie;
//=========================================
// Funkcje :
void sprawdz()
{
AnsiString linia;
char* bufor;
punkty = 0;
fstream plik;
//----------------------------------------
//Państwo :
if (panstwo [0] == litera)
{
plik.open("data\\panstwa_lib.txt",ios::in);
while (plik != "")
{
plik.getline(bufor,sizeof(bufor));
linia = bufor;
if(panstwo == linia )
{
punkty=punkty+10;
}
}
}
plik.close();
//Miasto:
if (miasto [0] == litera)
{
plik.open("data\\miasta_lib.txt",ios::in);
while (plik != "")
{
plik.getline(bufor,sizeof(bufor));
linia = bufor;
if(miasto == linia)
{
punkty=punkty+10;
}
}
}
plik.close();
//Zwierze:
if (zwierze [0] == litera)
{
plik.open("data\\zwierzeta_lib.txt",ios::in);
while (plik != "")
{
plik.getline(bufor,sizeof(bufor));
linia = bufor;
if(zwierze == linia)
{
punkty=punkty+10;
}
}
}
plik.close();
//Roslina:
if (roslina [0] == litera)
{
plik.open("data\\rosliny_lib.txt",ios::in);
while (plik != "")
{
plik.getline(bufor,sizeof(bufor));
linia = bufor;
if(roslina == linia)
{
punkty=punkty+10;
}
}
}
plik.close();
//Imię:
if (imie [0] == litera)
{
plik.open("data\\imiona_lib.txt",ios::in);
while (plik != "")
{
plik.getline(bufor,sizeof(bufor));
linia = bufor;
if(imie == linia)
{
punkty=punkty+10;
}
}
}
plik.close();
}
};
Byłbym niezmiernie wdzięczy za wszelkie rozwiązania oraz rady, dodam tylko, że pomimo intensywnych poszukiwań nie znalazłem skutecznego rozwiązania.
Pozdrawiam i czekam na odpowiedz :)
Edit 1: link do obrazka gdyby ktoś nie mógł odczytać komunikatu błędu http://imgup.pl/di/NJFZ/przechwytywanie.png