1

可能重复:
如何在 Visual Studio 2008 Express 中获得一个最小的 SDL 程序来编译和链接?

所以我是 C++ 新手,需要创建一个类。我认为这与 Sprite.cpp 中方法的实现有关。

谁能给我一个带有属性和方法的简单类的例子。或者至少让我知道我做错了什么?

错误 #1

Error   12  error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: void __thiscall std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >::_Compat(class std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> > const &)const " (?_Compat@?$_String_const_iterator@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEXABV12@@Z)   D:\GSE\Game with Jon Bye\game\game\main.obj

错误 #2

Error   13  error LNK1120: 1 unresolved externals   D:\GSE\Game with Jon Bye\game\Debug\game.exe    1

精灵.h

#include <string>
#include <SDL.h>
#include "Functions.h"

using namespace std;

class Sprite
{
private:
    int PosX;
    int PosY;
    int xDist;
    int yDist;
    string ImagePath;
    SDL_Surface Screen;
    SDL_Surface *temp, *sprite, *screen;

public:
    Sprite(int PosX, int PosY, string ImagePath, SDL_Surface Screen );
    void Sprite::DrawSprite( int x, int y, SDL_Surface *sprite, SDL_Surface *screen )
    {
        //Make a temporary rectangle to hold the offsets
        SDL_Rect offset;

        //Give the offsets to the rectangle
        offset.x = x;
        offset.y = y;

        //Blit the surface
        SDL_BlitSurface( sprite, NULL, screen, &offset );

        SDL_UpdateRect(screen, 0, 0, 0, 0);
    }

    void Sprite::Draw()
    {
        #pragma region Char to String Conversion

        string ImagePath;
        char * writable = new char[ImagePath.size() + 1];
        copy(ImagePath.begin(), ImagePath.end(), writable);
        writable[ImagePath.size()] = '\0';

        #pragma endregion
        temp = SDL_LoadBMP(writable);
        sprite = SDL_DisplayFormat(temp);
        SDL_FreeSurface(temp);

        // free the string after using it
        delete[] writable;

        DrawSprite(PosX, PosY, sprite, screen);
    }

    void Sprite::Move(int xDist, int yDist)
    {
        PosX += xDist;
        PosY += yDist;
        Draw();
    };
};

精灵.cpp

#include "Sprite.h"

Sprite::Sprite(int posX, int posY, std::string imagePath, SDL_Surface screen) :        PosX(posX), PosY(posY), ImagePath(imagePath), Screen(screen)
{
    void DrawSprite( int x, int y, SDL_Surface *sprite, SDL_Surface *screen );
    void Draw();
    void Move(int xDist, int yDist);
}
4

2 回答 2

0

啊,我的朋友乔纳森哦!看来您毕竟接受了我的建议来使用 SDL...

我不确定您的错误是什么意思,但我知道在 SDL 中,您需要输入以下内容:

#undef main

在你之后:

#include <SDL.h> 

否则它将无法正常工作。为什么?出于某种原因,SDL 在某处定义了“main”,因此当您包含“SDL.h”时,链接器会发疯,并且会感到困惑(因为 main 是入口函数)。

也许这是您的错误的根源,尽管我对此表示怀疑,但错误消息看起来与字符串有关...

另外,我真的不明白您的 Sprite.CPP 文件中发生了什么。如果您还是 C++ 的新手并且正在研究如何在 C++ 中创建类,您会在这里找到一些 C++ 教程,这就是我开始学习 C++ 的方式:http ://thenewboston.org/list.php?cat=16

于 2012-12-16T01:47:36.777 回答
0

使用向量和查找时 C++ 中未解决的外部问题

我处于调试模式而不是发布模式。

确保在您选择的新发布模式中设置链接器设置等,并且您正在构建发布项目。

于 2012-12-16T13:11:59.550 回答