0

I'm trying access the class in my library but I get undefined reference. I have tried some random things but I still don't get what's wrong. Maybe I should go to the easy way and write all in a different way but I need to know what I did wrong to improve. You can see the code. Error:

Error

main.cpp:

#include <stdlib.h>
#include <windows.h>
#include "game.h"

int __attribute__((constructor)) Start(); 
int __attribute__((destructor)) End(); 

HANDLE Icon = getIcon("./icono.ico");
HCURSOR Cursor = getCursor("./Test.cur");

int Start(){

};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR pCmdLine, int nCmdShow)
{
    Window MainWindow = Window(Icon, "Test", "Test", WS_OVERLAPPEDWINDOW, Cursor, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInstance, NULL);
    //MainWindow.enable(nCmdShow);
    //GameLoop();
};
int End(){

};

game.cpp:

//Headers
#include "game.h"

//Functions

LRESULT CALLBACK WindowsProcedure(HWND, UINT, WPARAM, LPARAM);

//Variables

//Objects

struct Vector2{
    float X;
    float Y;
};                                     

struct Vector3{
    float X;
    float Y;
    float Z;
};

struct Color3{
    int R;
    int G;
    int B;
};

struct Color4{
    int R;
    int G;
    int B;
    float A;
};


Window::Window(HANDLE Icon, const char*ID, const char*Title, DWORD Style, HCURSOR Cursor, int X, int Y, int Width, int Height, HWND Parent, HMENU Child, HINSTANCE Instance, LPVOID LpParam)
{
    //IDC_ARROW
    //instance = GetModuleHandle(0);
    windowsClass.cbSize = sizeof(WNDCLASSEX);
    windowsClass.style = 0;
    windowsClass.lpfnWndProc = WindowsProcedure;
    windowsClass.cbClsExtra = 0;
    windowsClass.cbWndExtra = 0;
    windowsClass.hInstance = Instance;
    windowsClass.hIcon = (HICON) Icon;
    windowsClass.hCursor = Cursor;
    windowsClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    windowsClass.lpszMenuName = NULL;
    windowsClass.lpszClassName = ID;
    windowsClass.hIconSm = (HICON) Icon;
    RegisterClassEx(&windowsClass);
    window = CreateWindow(ID, Title, Style, X, Y, Width, Height, Parent, Child, Instance, LpParam);
    //pthread_create(&Thread, NULL, Background, (void*)NULL);
};

    //Function
void Window::enable(int nCmdShow){
    ShowWindow(window, nCmdShow);
}

HWND Window::getWindow(){
    return this->window;
};

void Window::setIcon(HANDLE Icon){
    if (Icon) {
        SendMessage(this->window, WM_SETICON, ICON_SMALL, (LPARAM)Icon);
        SendMessage(this->window, WM_SETICON, ICON_BIG, (LPARAM)Icon);
    }else{
        std::cout<<"Icon not found!"<<std::endl;
    };
};

void Window::setCursor(HCURSOR Cursor){
    SetCursor(Cursor);
};

void Window::close(){
    DestroyWindow(this->window);
};

//Events

//int Window::onSizeEvent();
//int Window::onCloseEvent(HWND);

//Functions

HANDLE getIcon(const char*Icon_Path){
    return (HANDLE)LoadImage(0, Icon_Path, IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_LOADFROMFILE);
};

HCURSOR getCursor(const char*Cursor_Path){
    if (!LoadCursorFromFile(Cursor_Path)){
        std::cout<<"Cursor file not found, 0 was returned!!"<<std::endl;
    }
    return LoadCursorFromFile(Cursor_Path);
}

void GameLoop(){
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}

LRESULT CALLBACK WindowsProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch (msg){
        case WM_DESTROY:
        PostQuitMessage(0);
        break;
        default:
        return DefWindowProc(hwnd, msg, wParam, lParam);
        break;
    }
    return 0;
};

game.h:

#ifndef GAME_H
#define GAME_H
#include <pthread.h>
#include <iostream>
#include <windows.h>

struct Vector2;
struct Vector3;
struct Color3;
struct Color4;

class Window{
private:
    HWND window;
    WNDCLASSEX windowsClass;
    pthread_t Thread;
public:
    Window(HANDLE Icon, const char*ID, const char*Title, DWORD Style, HCURSOR Cursor, int X, int Y, int Width, int Height, HWND Parent, HMENU Child, HINSTANCE Instance, LPVOID LpParam);

    //Function

    void enable(int nCmdShow);

    HWND getWindow();

    void setIcon(HANDLE Icon);
    void setCursor(HCURSOR Cursor);

    void close();

    //Events
    int onSizeEvent();
    int onCloseEvent(HWND);
};

HCURSOR DEFAULT_CURSOR = LoadCursor(NULL, IDC_ARROW);

HANDLE getIcon(const char*Icon_Path);
HCURSOR getCursor(const char*Cursor_Path);

void GameLoop();
#endif

Makefile

0 Answers0