W pliku Unit1.cpp załączam sobie plik Logika.h, gdzie znajduje się klasa Logika (konstruktor jest i destruktor).
Niestety podczas tworzenia obiektu
Logika obiekt;
Wylatuje mi błąd:
[Linker Error] Unresolved external 'Logika::Logika()' referenced from C:\USERS\DAMIAN\DESKTOP\KOD\UNIT1.OBJ
[Linker Error] Unresolved external 'Logika::~Logika()' referenced from C:\USERS\DAMIAN\DESKTOP\KOD\UNIT1.OBJ
Co wskazuje na to że nie widzi w ogóle mojej klasy mimo że u samej góry wrzuciłem:
#include "Logika.h"
Co może być przyczyną?
Jest to gra kółko krzyżyk zbudowana z sześciu FORM + klasy Logika.h
Logika.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Logika.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
Logika::Logika()
{
//przypisanie poczatkowych wartosci 'n'
for(int i=1; i<10; i++){
this->p[i]='n';
}
//kto rozpoczyna
this->kto='o';
//wynik poczatkowy
this->wynik_kolko=0;
this->wynik_krzyzyk=0;
//do ilu gramy
this->do_ilu_gramy=2;
};
Logika::~Logika(){}
//ustawianie jakiegos pola na kolko lub krzyzyk
void Logika::ustawPole(int ktore, char jak){
this->p[ktore]=jak;
}
//ustawianie kto wykonuje teraz ruch
void Logika::ustawKto(char i){
this->kto=i;
}
//dodaj punkt do wyniku kolka
void Logika::dodajPunktKolko(){
this->wynik_kolko++;
Form1->kolko_w->Caption=IntToStr(this->wynik_kolko);
}
//dodaj punkt do wyniku krzyzyka
void Logika::dodajPunktKrzyzyk(){
this->wynik_krzyzyk++;
Form1->krzyzyk_w->Caption=IntToStr(this->wynik_krzyzyk);
}
//ustaw do ilu gramy
void Logika::ustawDoIluGramy(int i){
this->do_ilu_gramy=i;
}
//stworzenie nowej gry
void Logika::nowaGra(){
Form1->pole1->Picture->LoadFromFile("img/nic.bmp");
Form1->pole2->Picture->LoadFromFile("img/nic.bmp");
Form1->pole3->Picture->LoadFromFile("img/nic.bmp");
Form1->pole4->Picture->LoadFromFile("img/nic.bmp");
Form1->pole5->Picture->LoadFromFile("img/nic.bmp");
Form1->pole6->Picture->LoadFromFile("img/nic.bmp");
Form1->pole7->Picture->LoadFromFile("img/nic.bmp");
Form1->pole8->Picture->LoadFromFile("img/nic.bmp");
Form1->pole9->Picture->LoadFromFile("img/nic.bmp");
Form1->tura->Picture->LoadFromFile("img/osmall.bmp");
for(int i=1; i<10; i++){
this->p[i]='n';
}
kto='o';
Form1->pole1->Enabled = true;
Form1->pole2->Enabled = true;
Form1->pole3->Enabled = true;
Form1->pole4->Enabled = true;
Form1->pole5->Enabled = true;
Form1->pole6->Enabled = true;
Form1->pole7->Enabled = true;
Form1->pole8->Enabled = true;
Form1->pole9->Enabled = true;
}
void Logika::sprawdzWygrana(char i){
//sprawdzenie tylko dla kolka
if(i=='o'){
if(this->wynik_kolko==this->do_ilu_gramy){
//informacja ze ktos wygral caly pojedynek
Application->MessageBox("WYGRYWA KÓŁKO", "KONIEC GRY", MB_OK | MB_ICONWARNING);
//uruchomienie nowej gry
this->nowa_gra();
//reset wynikow
this->wynik_kolko=0;
this->wynik_krzyzyk=0;
this->Form1->kolko_w->Caption=IntToStr(wynik_kolko);
this->Form1->krzyzyk_w->Caption=IntToStr(wynik_krzyzyk);
//Form1->Visible=false;
//Form2->Visible=true;
//return;
}
//koniec rundy, wygrywa kolko
Application->MessageBox("Wygrywa kółko!", "Koniec rundy", MB_OK);
//nowa runda-gra
this->nowaGra();
}
//sprawdzenie tylko dla krzyzyka
if(i=='x'){
if(this->wynik_krzyzyk==this->do_ilu_gramy){
//informacja ze ktos wygral caly pojedynek
Application->MessageBox("WYGRYWA KRZYŻYK", "KONIEC GRY", MB_OK | MB_ICONWARNING);
//uruchomienie nowej gry
this->nowa_gra();
//reset wynikow
this->wynik_kolko=0;
this->wynik_krzyzyk=0;
Form1->kolko_w->Caption=IntToStr(this->wynik_kolko);
Form1->krzyzyk_w->Caption=IntToStr(this->wynik_krzyzyk);
//Form1->Visible=false;
//Form2->Visible=true;
//return;
}
//koniec rundy, wygrywa krzyzyk
Application->MessageBox("Wygrywa krzyżyk!", "Koniec rundy", MB_OK);
//nowa runda-gra
this->nowaGra();
}
}
//sprawdzanie czy kto wygrał
void Logika::sprawdzPunkt(){
//szukam 3 kolek lub 3 krzyzykow w odpowiednim ulozeniu
if((this->p[1]==this->p[2] && this->p[2]==this->p[3] && this->p[1]!='n') ||
(this->p[4]==this->p[5] && this->p[5]==this->p[6] && this->p[4]!='n') ||
(this->p[7]==this->p[8] && this->p[8]==this->p[9] && this->p[7]!='n') ||
(this->p[1]==this->p[4] && this->p[4]==this->p[7] && this->p[7]!='n') ||
(this->p[2]==this->p[5] && this->p[5]==this->p[8] && this->p[2]!='n') ||
(this->p[3]==this->p[6] && this->p[6]==this->p[9] && this->p[3]!='n') ||
(this->p[1]==this->p[5] && this->p[5]==this->p[9] && this->p[1]!='n') ||
(this->p[3]==this->p[5] && this->p[5]==this->p[7] && this->p[3]!='n'))
{
//JEZELI WYGRALO KOLKO
if (kto=='x') {
//dodaje punkt
this->dodajPunktKolko();
//sprawdzam czy KOLKO wygralo caly pojedynek
this->sprawdzWygrana('o');
}else {
//CZYLI WYGRAL KRZYZYK
//dodaje punkt
this->dodajPunktKrzyzyk();
//sprawdzam czy KRZYZYK wygral caly pojedynek
this->sprawdzWygrana('x');
}
}else{
//SPRAWDZAM CZY JEST REMIS
if(p1!='n' && p2!='n' && p3!='n' && p4!='n' && p5!='n' && p6!='n' && p7!='n' && p8!='n' && p9!='n'){
Application->MessageBox("Nikt nie wygrał", "Koniec rundy", MB_OK);
this->nowaGra();
}
}
}
//zaznaczenie pola krzyzykiem albo kolkiem
void Logika::zaznaczPole(int i){
//sprawdzam w ogole moge zaznaczyc to pole
if(this->p[i]=='n')
{
//sprawdzam kogo jest tura
if(this->kto=='o')
{
//zmieniam obrazek pola
pole1->Picture->LoadFromFile("img/o.bmp");
//ustawiam odpowiednia zmienna
this->ustawPole(i,'o');
//ustawiam kto teraz bedzie wykonywal ruch
this->ustawKto('x');
//zmieniam obrazek kto bedzie wykonywal ruch
tura->Picture->LoadFromFile("img/xsmall.bmp");
}
else
{
//zmieniam obrazek pola
pole1->Picture->LoadFromFile("img/x.bmp");
//ustawiam odpowiednia zmienna
this->ustawPole(i,'x');
//ustawiam kto teraz bedzie wykonywal ruch
this->ustawKto('o');
//zmieniam obrazek kto bedzie wykonywal ruch
tura->Picture->LoadFromFile("img/osmall.bmp");
}
//wylaczam to pole z uzywania
pole1->Enabled=false;
//sprawdzam komu przyznac ew. punkt jezeli ktos juz wygral
this->sprawdzPunkt();
}
}
Logika.h
//---------------------------------------------------------------------------
#ifndef LogikaH
#define LogikaH
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class Logika{
private:
char p[9], kto;
int wynik_kolko, wynik_krzyzyk, do_ilu_gramy;
public:
Logika();
~Logika();
void ustawPole(int ktore, char jak);
void ustawKto(char i);
void dodajPunktKolko();
void dodajPunktKrzyzyk();
void ustawDoIluGramy(int i);
void nowaGra();
void sprawdzPunkt();
void sprawdzWygrana(char i);
void zaznaczPole(int i);
};
#endif
Unit1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include "Logika.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TImage *pole1;
TImage *pole2;
TImage *pole3;
TImage *pole4;
TImage *pole5;
TImage *pole6;
TImage *pole7;
TImage *pole8;
TImage *pole9;
TLabel *Label1;
TImage *tura;
TLabel *Label2;
TLabel *Label3;
TLabel *kolko_w;
TLabel *Label5;
TLabel *krzyzyk_w;
void __fastcall FormCreate(TObject *Sender);
void __fastcall pole1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Logika.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Logika gra;
//nowa_gra();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pole1Click(TObject *Sender)
{
;
}
//---------------------------------------------------------------------------