2

こんにちは、IDE Visual Studio 2012に問題があります。SDLを学び始めたので、まったく新しいので、SDLを使用するときに適切な構造を適用しようとしています。クラスでSDLを使い始めると、問題が発生します。mainにすべて入力すれば問題なく動作します。何が間違っているのかわかりませんここでエラーが発生するのを手伝ってもらえますか

1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _exit already defined in LIBCMT.lib (crt0dat.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _fclose already defined in LIBCMT.lib(fclose.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>C:\Users\User\documents\visual studio 2012\Projects\Nebula\Debug\Nebula.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

何か問題がある場合の私のコードは次のとおりです

主要

#include <SDL.h>
#include "System.h"

int main(int argc, char* argv[])
{
    System RedObject;
    RedObject.SetUp();

    SDL_Quit();
    return 0;
}

2番目のファイル。

#include "System.h"

System::System()
{
}

System::~System()
{
}

void System::SetUp()
{
    SDL_Init(SDL_INIT_EVERYTHING); // The SDL Set up bit.
    SDL_Surface * screen;
    SDL_WM_SetCaption("Window Name", NULL);

    fullscreen = false;

    if(fullscreen == true)
    {
        screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE | SDL_FULLSCREEN);
    }
    else
    {
        screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
    }

    bool running = true;

    while(running)
    {
        SDL_Event Event;

        while(SDL_PollEvent(&Event))
        {
            switch(Event.type)

                case SDL_QUIT:
                    running = false;
                break;
        }

        SDL_Flip(screen);
    }
}

2番目のファイルヘッダー:

#ifndef SYSTEM_H
#define SYSTEM_H

#include <SDL.h>

class System
{
    private:
        int SHeight, SLenght;
        bool fullscreen;

    public:
        System();
        ~System();
        void SetUp();
};

#endif

また、マルチスレッドDLL(/ MD)で実行するようにIDEコードジェネレーターを設定しました。それが問題かどうかはわかりません。この質問がすでに回答されている場合は申し訳ありませんが、私は答えを見つけることができます。前もって感謝します。

4

2 に答える 2

0

問題は、VisualStudioの.NETFrameworkSystemがルートレベルの名前空間として使用しているため、名前の競合が発生している可能性があることだと思います。クラスにSystem以外の名前を付けてみてください。

于 2013-02-01T23:38:11.110 に答える
0

私はそれを考え出した!この問題は、SDLを使用してオブジェクトをビルドし、2つのライブラリの競合があり、そのうちの1つを無視する必要がある場合に発生します。LIBCMT.libを無視する必要があります。ここでの方法がわからない場合の手順は次のとおりです。

  1. プロジェクトのプロパティページを開きます。

  2. リンカーフォルダをクリックします。

  3. [入力]ページをクリックします。

  4. [特定のデフォルトライブラリを無視する]を選択し、編集に移動してLIBCMT.libに入力し、[OK]を押してから設定を適用すると、準備が整います。

これがあなたの苦痛の日々を救うことを願っています:)

于 2013-02-03T11:02:07.697 に答える