Ошибка Apple Mach-O link (Id) в платформе Xcode 5 C ++ sdl2

Я серьезно думаю, что, возможно, проверил каждое сообщение об ошибке идентификатора машинной ссылки на stackOverFlow и не смог найти решение своей проблемы … Я пока не до конца понимаю, как работает компоновщик, поэтому не всегда могу понять, как это исправить. эти ошибки, когда они появляются …

Я следовал за этими уроками YT какой-то парень по имени Конрад Яблонский возиться с созданием ролевых игр на C ++ [с использованием фреймворков SDL2 и SDL.image] … Я многое узнал о игровой логике ролевых игр — это был, безусловно, хороший опыт для тех, кто хорошо разбирается в основах, но плохо знаком с C ++ …

На этом этапе в уроках он разделяет один класс на множество подклассов … И все работало нормально, пока я не начал разбивать один класс на множество разных файлов .cpp и .h … Сообщение об ошибке гласит:

— Неопределенные символы для архитектуры x86_64:

— «cSprite :: draw ()», на которую ссылаются из:

— gMain :: gameLoop () в gMain.o

*— ld: символы не найдены для архитектуры x86_64 *

— clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)

Весь проект не содержал ошибок до компиляции, и я не до конца понимаю, как работает компилятор, поэтому я не знаю, с чего начать при попытке его настроить … Я могу выставить классы, если кто-нибудь что-нибудь знает об этих Тип ошибок и хочет помочь — Если нет, я все равно буду ценить все, что приведет меня в правильном направлении, насколько выяснить, как работает компоновщик … Я все еще новичок в stackoverflow, поэтому я не смогу +1 ответов, пока я не стану более активным, но когда я получу шанс, я верну услугу

——— gMain.cpp ———

#include <iostream>
#include "stdafx.h"#include "gMain.h"

using namespace std;

gMain::gMain(int passed_screenWidth, int passed_screenHeight)
{
screenWidth = passed_screenWidth;
screenHeight = passed_screenHeight;

// quit boolean
quit = false;

// create instance of cSDL class
csdl_setup = new cSDL_Setup(&quit, screenWidth, screenHeight);

grass = new cSprite(csdl_setup->getRenderer(), "data/images.jpeg", 0, 0, screenWidth, screenHeight);

bruce_Lee = new cSprite(csdl_setup->getRenderer(), "/Users/jamesbryant/Desktop/gamee/gamee/lee.bmp", 300, 250, 50, 100);}

gMain::~gMain(void)
{
}

void gMain::gameLoop(void)
{
// game loop logic
while (!quit && csdl_setup->getMainEvent() ->type != SDL_QUIT)
{
csdl_setup->begin();

grass->draw();
bruce_Lee->draw();csdl_setup->end();

}
}

—— gMain.h ——

#ifndef __game__gMain__
#define __game__gMain__
#pragma once

//#include <iostream>
//#include <SDL2/SDL.h>
//#include <SDL2_image/SDL_image.h>
//#include <SDL2/SDL_audio.h>
#include "cSDL_Setup.h"#include "cSprite.h"
using namespace std;

class gMain
{
public:
gMain(int passed_screenWidth, int passed_screenHeight);
~gMain(void);
void gameLoop();

private:
int screenWidth;
int screenHeight;

bool quit;

//cSprite
class cSprite* grass;

class cSprite* bruce_Lee;// cSDL_Setup class object
class cSDL_Setup* csdl_setup;
};

#endif /* defined(__game__gMain__) */

—— cSprite.cpp ——-

#include "stdafx.h"#include "cSprite.h"//#include "gMain.h"//#include <SDL2/SDL_main.h>
//#include <SDL2/SDL.h>
//#include "cSDL_Setup.h"
using namespace std;

void draw(SDL_Renderer, SDL_Texture, SDL_Rect);

cSprite::cSprite(SDL_Renderer* passed_renderer, string filePath, int x, int y, int w, int h)
{
renderer = passed_renderer;

//... image
image = NULL;
image = IMG_LoadTexture(renderer,filePath.c_str());

// image error message
if (image == NULL)
{
cout<<"Couldnt load image..."<<filePath.c_str()<<endl;
}

//image dimensions
rect->x = x;
rect->y = y;
rect->w = w;
rect->h = h;
};

cSprite::~cSprite(void)
{
SDL_DestroyTexture(image);
}

//get methods
//SDL_Rect* cSprite::getRect()
//{
//    return rect;
//}

//get methods
//SDL_Texture* cSprite::getImage()
//{
//    return image;
//}

void cSprite::draw()
{
SDL_RenderCopy(renderer, image, NULL, rect);
}

——- cSprite.h ———

#ifndef __game__cSprite__
#define __game__cSprite__
#pragma once

#include <iostream>
#include <SDL2/SDL_main.h>
#include <SDL2/SDL.h>

using namespace std;class cSprite
{
public:
cSprite(SDL_Renderer* passed_renderer, string filePath, int x, int y, int w, int h);
~cSprite(void);

void draw();

private:
SDL_Texture* image;
SDL_Rect* rect;

SDL_Renderer* renderer;
};

#endif /* defined(__game__cSprite__) */

—— cSDL_Setup.cpp ——-

#include "stdafx.h"#include "cSDL_Setup.h"//#include "gMain.h"
using namespace std;

cSDL_Setup::cSDL_Setup(bool* quit, int screenWidth, int screenHeight)
{
// create window
window = NULL;
window = SDL_CreateWindow("rWDY_pWDR", 100, 100, screenWidth, screenHeight, SDL_WINDOW_RESIZABLE);

// if window couldnt be created...
if (window == NULL)
{
cout<<"Window couldnt be created..."<<endl;

*quit = true;
//exit(0);
}

//create renderer
renderer = NULL;
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

// initialize images
mainEvent = new SDL_Event();

}

cSDL_Setup::~cSDL_Setup(void)
{
SDL_DestroyWindow(window);
SDL_DestroyRenderer(renderer);
delete mainEvent;
}

//get methods
SDL_Renderer* cSDL_Setup::getRenderer()
{
return renderer;
}

SDL_Event* cSDL_Setup::getMainEvent()
{
return mainEvent;
}

void cSDL_Setup::begin()
{
SDL_PollEvent(mainEvent);
SDL_RenderClear(renderer);
}

void cSDL_Setup::end()
{
SDL_RenderPresent(renderer);

}

——- cSDL_Setup.h ——-

#ifndef __game__cSDL_Setup__
#define __game__cSDL_Setup__
#pragma once//#include <iostream>
//#include "gMain.h"
using namespace std;

class cSDL_Setup
{
public:
cSDL_Setup(bool* quit, int screenWidth, int screenHeight); // 1 parameter(s): 'quit'
~cSDL_Setup(void);

// 'get' functions
SDL_Renderer* getRenderer();
SDL_Event* getMainEvent();

void begin();
void end();

private:
SDL_Window* window;
SDL_Renderer* renderer;
SDL_Event* mainEvent;

};

#endif /* defined(__game__cSDL_Setup__) */

——— stdafx.h ———

#ifndef gamee_stdafx_h
#define gamee_stdafx_h
#pragma once

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2_image/SDL_image.h>
#include <SDL2_mixer/SDL_mixer.h>#endif

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]