0

このプロジェクトは、SDL を使用して C++ で作成しています。

コンパイル中にこのエラーが発生しましたが、修正方法がわかりません。

それは言います:

Source/Classes/game.cpp:15:15: advarsel(this means 'warning' in danish): unused variable 'imagemanager' [-Wunused-variable]

しかし、imagemanager はクラスですか? これはエラーの原因となっている行です:

Imagemanager imagemanager; // Init's class Imagemanager

ファイル「game.cpp」の15行目に配置されています

これは「Imagemanager」です。

class Imagemanager
{
friend class Player;
private:

public:
SDL_Surface* load_image( std::string filename ); // Loads images

//Apply a surface to another. Often used for applying surface to display
int apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip );
};

これは別のファイルで定義されていますが、適切に含まれています。

編集:私はこのクラスを使用していると言うのを忘れましたが、コンパイラは、私がそれを使用すると、それが定義されていないと言います。ここでimagemanagerを使用しています:

surface = imagemanager.load_image("player.png";);

これは、という名前の別のクラスにあります

Player

として初期化されます

player 

両方のクラス (imagemanager と player) はクラス Game のコンストラクターで初期化され、ゲームはメインで初期化されます。私はプレーヤーでイメージマネージャーを使用しており、他の場所でも使用する予定です。メインファイル:

#include <windows.h>
#include <string>

#include "SDL/SDL.h"
#include "SDL/SDL_image.h"

#include "Classes/game.cpp"

int main( int argc, char* args[] ) 
{
    Game game;
    game.initialize(); // Initializes the rest of game
    game.go(); // Starts the game
    return 0; // Ends the program
}

Game.cpp のコンストラクター + ヘッダー ファイル:

#ifndef _GAME_
#define _GAME_
#include "imagemanager.cpp"
#include "player.cpp"
#include "timer.cpp"
#include "game.h"

Game::Game()
{
    screenDimension.w = 940; // Width  of the initialized window
    screenDimension.h = 540; // Height of the initialized window
    useFrameCap = true; // Tells the frame cap wether to activate or not
    quitGame = false; // Tells the main loop to quit if true
        FPS = 60; // Frames per second. Used by the frame cap.
    Imagemanager imagemanager; // Inits class Imagemanager
    Player player; // Inits class Player
    Timer timer; // Inits class Timer
    Game game; // Inits class Game
}

後で「game.go()」で関数「player.render()」を呼び出し、その後「player.update()」を呼び出します。

if ( RunJumpF )
    {
        RunJumpF = player.jump();
    }

RunJumpF は、右が押されたとき、または次のティックで関数を実行したいときに true になります

私が呼び出す他のもののすべての他の計算の後:

player.update();

実際の関数を含む私の player.cpp ファイルは次のようになります。

#ifndef __PLAYER__
#define __PLAYER__
#include <string>
#include "player.h"

Player::Player()
{
    surface = imagemanager.load_image("player.png";); // Loads the player tile and saves into the surface 'surface'
    if (surface == NULL) // in case something went wrong in loading the player, tell the user
    {
        SDL_WM_SetCaption("ERROR LOADING PLAYER!", NULL); // I know there are better ways to do this but i'll look at that later
    }
    needsUpdate = true;
}

bool Player::jump()
{
    move.x = move.x + 3; // Moves the player X pixels right, next time the player updates
    needsUpdate = true; // Tells the program to update the player

    return true; // Tells the program that this function isn't done and it will be run next tick
}

int Player::update()
{
    if ( needsUpdate )
    {
        pos.x = pos.x + move.x;
        pos.y = pos.y + move.y;
        move.x = 0;
        move.y = 0;
        render(); // This calculates the position of the player and blits the player to the display
        return 1; // If no errors were discovered return 1;
    } else {
        render();
        return -1; // If no need to update, returns -1
    }
}

bool Player::render()
{
        if (SDL_BlitSurface( surface, NULL, display, pos ) != 0)
        {
            SDL_WM_SetCaption("ERROR BLITTING PLAYER!", NULL); // Tells the user that shit gone wrong
            return false;
        }
        return true
}
#endif
4

2 に答える 2

3

エラーではなく警告です。オブジェクトを使用せず、imagemanager宣言するだけなので、この警告があります。たとえば を使用することも (void)imagemanager;、実際にこのオブジェクトを使用することもできます (アプリケーションを開発するまでは、この警告に注意を払わないでください)。警告は消えます。

編集: このオブジェクトの使用方法を教えてください。

于 2013-03-20T08:45:18.523 に答える
1

imagemanagerタイプの変数(オブジェクト)ですImagemanager

したがって、警告は正しいです。コードのどこかで使用するimagemanagerか、行を削除してください。

Imagemanagerまた、C++ では大文字と小文字が区別されるため、とには違いがあることに注意してくださいimagemanager

1 つはコード内のクラスで、もう 1 つはその型のオブジェクトです。

于 2013-03-20T08:45:28.430 に答える