Witam,
Po raz kolejny podczas tworzenia programu napotkałem problem. Tym razem jednak nie udaje mi się znaleźć rozwiązania. Wiem że post jest długi ale postarałem się jak najlepiej przedstawić mój problem. A jest on następujący:
Mam Klasę klient która ma odpowiadać za przechowywanie informacji o aktualnie zalogowanych kontach. Plik nagłówkowy wygląda następująco:
//---------------------------------------------------------------------------
#ifndef KlientH
#define KlientH
//---------------------------------------------------------------------------
#endif
#include <String.h>
class Klient{
private:
private:
char* id;
char *Imie;
char *Nazwisko;
int ilosc_kont;
char *nr_kont;
int debet;
int stan;
int pin;
int limit;
char* konto;
public:
//-----------------------------Pobieranie
Klient();
Klient(char* konto);
~Klient();
//Pobieranie
void pobierzKontaKlienta();
void pobierzPinKonta(char* nrkonta);
void pobierzNazwiskoKlienta(char* nrkonta);
void pobierzImieKlienta(char* nrkonta);
void pobierzLimitKonta(char* nrkonta);
void pobierzDebetKonta(char* nrkonta);
void pobierzStanKonta(char* nrkonta);
//Wyswietlanie
int wyswietlPinKonta();
char* wyswietlNazwiskoKlienta();
char* wyswietlImieKlienta();
int wyswietlLimitKonta();
int wyswietlDebetKonta();
int wyswietlStanKonta();
};
Metody oznaczone komentarzem **Pobieranie **odpowiadają za pobranie informacji z Bazy danych, te oznaczone jako **Wyswietlanie **zwracają wartość poszczególnych pól.
Przykładowy kod metody metody:
void Klient::pobierzImieKlienta(char* nrkonta){
Baza konto;
konto.connect();
char* s="select kl.Imie from klienci kl join konta kn on(kl.id=kn.id_klienta) where numer_konta=";
strcat(s,nrkonta);
Imie=konto.Zapytanie(s);
//Powiązana metoda Zapytanie
char * Baza::Zapytanie(char* s)
{
if (!mysql_query(conn,s)) {
myRES = mysql_use_result(conn);
if (myRES) {
myFields = mysql_fetch_row(myRES);
return myFields[0];
}
mysql_free_result(myRES);
}
}
A teraz przejdźmy do konkretu, gdy chcę odwołać się przez obiekt klasy do metod wszystko działa fajnie, ale tylko wtedy jeśli mam tylko jeden obiekt. W chwili dodania drugiego obiektu tej samej klasy niestety ale program wywala błąd.
Kod działający:
void __fastcall TForm3::FormShow(TObject *Sender)
{
Klient *konto = new Klient(nr_konta);
konto->pobierzImieKlienta(nr_konta);
}
Kod wywalający błąd:
void __fastcall TForm3::FormShow(TObject *Sender)
{
nr_konta=Form1->ComboBox1->Items->Strings[Form1->ComboBox1->ItemIndex].c_str();
Klient konto;
Klient konto2;
konto.pobierzImieKlienta(nr_konta);
konto2.pobierzImieKlienta("658237985");
}
Błąd jaki otrzymuje:
Access violation at address 0040CFD2 in module 'Projectl.exe'. Read of
address 00000000.