I'm new in c++ so please be patient. ;)
I'm trying to create abstract fabric.


My errors:

1>ObslugaOkna.obj : error LNK2019: unresolved external symbol "public: __thiscall Figury_Produkoj::Figury_Produkoj(void)" (??0Figury_Produkoj@@QAE@XZ) referenced in function "public: static long __stdcall ObslugaOkna::WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@ObslugaOkna@@SGJPAUHWND__@@IIJ@Z)


1>C:\Documents and Settings\Mati\Pulpit\Nowy folder (4)\grs\Debug\grs.exe : fatal error LNK1120: 1 unresolved externals

And code:
ObslugaOkna.cpp Figury_Produkoj A; IFIGURY.h

#include <windows.h>

#define L_KLOCKOW 5
#ifndef Figury_Nastepny_H_
#define Figury_Nastepny_H_

#ifndef Figury_Aktualny_H_
#define Figury_Aktualny_H_
#ifndef Figury_Produkoj_H_
#define Figury_Produkoj_H_

class IFigury
{
public:
	static int Klocek[7][4 ][5 ][5];
	void Rysuj_kwadrat(HDC okno,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y);					//Poruszający się klocek
	int Losuj_klocek(int pomiedzy);
	virtual int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst)=0;
	//virtual  Wybierz()=0;
	//virtual int Wybierz(char* tekst)=0;
	IFigury();
};
#endif
#endif
#endif

Figury_Nastepny.h

#include"IFigury.h"
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
#ifndef IFigury_H_
#define IFigury_H_

class Figury_Nastepny: virtual public IFigury
{
//private:
		//const int klocek_x,klocek_y;  //Pozycje x,y klocka
public:
	int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst);
	Figury_Nastepny();
};
#endif

FIGURY_AKTUALNY.h

#include"IFigury.h"
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")
//#ifndef IFigury_H_
//#define IFigury_H_

class Figury_Aktualny: virtual public IFigury
{
public:
	//const int klocek_x,klocek_y;  //Pozycje x,y klocka
	int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst);
	Figury_Aktualny();
};

//#endif

Figury_Produkoj.h

//#include "IFigury.h"
#include "Figury_Nastepny.h"
#include "Figury_Aktualny.h"
//#include "IFigury.h"
#include <string.h>
#include <iostream>
#include <string>
#include <windows.h>
#define WIN32_LEAN_AND_MEAN
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")


class Figury_Produkoj: public Figury_Aktualny, public Figury_Nastepny, virtual public IFigury
{
public:
	static int klocek_numer,klocek_obrot; //Numer klocka i jego obrot
	static int nast_klocek_numer,nast_klocek_obrot;  //Numer następnego klocka
	static int klocek_x, klocek_y;
	int Rysuj_figure(HDC kontekst,int pkt_x,int pkt_y,int klocek_numer,int klocek_obrot, int poczatkowy_x,int poczatkowy_y,char* tekst)
{
	if(strstr(tekst,"NASTEPNY")) 
			{
				return(Figury_Nastepny::Rysuj_figure(kontekst,pkt_x,pkt_y,klocek_numer,klocek_obrot, poczatkowy_x,poczatkowy_y,tekst));
			}
			else
			{

				return(Figury_Aktualny::Rysuj_figure(kontekst,pkt_x,pkt_y,klocek_numer,klocek_obrot, poczatkowy_x,poczatkowy_y,tekst));
			}
	return 0;
} //Wybiera który obiekt ma być stworzony
	Figury_Produkoj();
};

ObslugaOkna.cpp

/********************************************************************
FUNKCJA OKNA realizujaca przetwarzanie meldunków kierowanych do okna aplikacji*/
#include"ObslugaOkna.h"

LRESULT CALLBACK ObslugaOkna::WndProc (HWND okno, UINT kod_meldunku, WPARAM wParam, LPARAM lParam)
{
	//Figury A;
	//klocek_numer=A.Losuj_klocek(7);
	//klocek_obrot=A.Losuj_klocek(4);
	Figury_Produkoj A;
	    	HMENU mGra, mPomoc, mGlowne;
/* PONIŻSZA INSTRUKCJA DEFINIUJE REAKCJE APLIKACJI NA POSZCZEGÓLNE MELDUNKI */
	switch (kod_meldunku) 
	{
	
	case WM_CREATE:  //meldunek wysyłany w momencie tworzenia okna

		mGra = CreateMenu();//Menu Gra
		AppendMenu(mGra, MF_STRING, 100, TEXT("&Nowa Gra             F2"));
		AppendMenu(mGra, MF_STRING, 101, TEXT("&Pause/wznów        P"));
		AppendMenu(mGra, MF_SEPARATOR, 0, TEXT(""));
		AppendMenu(mGra, MF_STRING, 102, TEXT("&Najlepsze wyniki"));
		AppendMenu(mGra, MF_STRING, 103, TEXT("&Zakończ"));
		
		mPomoc = CreateMenu();//Menu Pomoc
		AppendMenu(mPomoc, MF_STRING, 200, TEXT("&Tetris-informacje"));
		
		mGlowne = CreateMenu(); //Menu Glowne
		AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mGra, TEXT("&Gra"));
		AppendMenu(mGlowne, MF_POPUP, (UINT_PTR) mPomoc, TEXT("&Pomoc"));
		SetMenu(okno, mGlowne);
		DrawMenuBar(okno);

		SetTimer(okno, 1, 1000, NULL);			//Ustawienie Timera prędkość gry(animation)
		return 0;


		case WM_COMMAND: //reakcje na wybór opcji z menu
		switch (wParam)
		{
		case 100: if(MessageBox(okno, TEXT("Czy chcesz rozpoczać nową gre"), TEXT("Jeszcze nie teraz ;)"), MB_YESNO) == IDYES)
					MessageBeep(0);
                  break;
		case 101: if(MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK) == IDYES)
					MessageBeep(0);
                  break;
	    case 102: if(MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK) == IDYES)
					MessageBeep(0);
                  break;
		case 103: DestroyWindow(okno); //wysylamy meldunek WM_DESTROY
        		  break;
		case 200: MessageBox(okno, TEXT("Opcja niedostepna"), TEXT("Jeszcze nie teraz ;)"), MB_OK);
		}
		return 0;


	case WM_KEYDOWN: //meldunek wcisniecia klawisza
	{
		switch (wParam)
		{
			case VK_RIGHT:
			break;
			case VK_LEFT:
			break;
        }
	}


	case WM_KEYUP:  //meldunek zwolnienia klawisza
		return 0;


	case WM_LBUTTONDOWN: //reakcja na lewy przycisk myszki
		{
			int x = LOWORD(lParam);
			int y = HIWORD(lParam);

			return 0;
		}
		

		case WM_TIMER:				//Zadania odświerzania okna
		{
			InvalidateRect(okno,0,true);
			return 0;
		}

			
		////////////////////////////////////////////RYSOWANIE
		case WM_PAINT:
		{
		PAINTSTRUCT ps;
		HDC hdcOkno;
		RECT r;
 		hdcOkno = BeginPaint(okno, &ps);

		r.left = 0;
		r.top = 10;
		r.right = 400;
		r.bottom = 100;
		SetTextColor(hdcOkno,RGB(255,255,0));
		SetBkColor(hdcOkno,RGB(0,0,0));
		DrawText(hdcOkno,TEXT("A to kiedyś zadziała ??? ;-) "),-1,&r,DT_CENTER);
		r.top = 30;
		DrawText(hdcOkno,TEXT("!! TETRIS !!"),-1,&r,DT_CENTER);
		//Gra A(hdcOkno);
		//A.RuchKlocek(hdcOkno);
		EndPaint (okno, &ps);

			return 0;
		}

	case WM_DESTROY: //obowiązkowa obsługa meldunku o zamknięciu okna
		PostQuitMessage (0) ;
		return 0;

	default: //standardowa obsługa pozostałych meldunków
		return DefWindowProc(okno, kod_meldunku, wParam, lParam);
	}
}

Recommended Answers

All 2 Replies

OK I'm fix it.
I 've to create constructor:
...(void){};
before i use
...(){};
And that was the error :D

Polish wikipedia said:
this error is so easy, that it you shouldn't come to the forum ;)

Doesn't really surprise me, an error like that usually implies a missing function implementation. Glad you figured out what was missing.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.