2013-03-20 553 views
0

我使用SDL在C++中使用此项目。未使用的变量'class'[-Wunused-variable] - 错误/警告

编译时出现此错误,我不知道如何解决此问题。

它说:

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

但的ImageManager是类? 这是导致错误的行:

Imagemanager imagemanager; // Init's class Imagemanager 

它放置在管线15中的文件 'game.cpp'

这是 '的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的构造函数中初始化,并且游戏在main中初始化。我在播放器中使用imagemanager,并计划在其他地方使用它。 主文件:

#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越来越真实

其他的事情我呼吁所有其他计算后:

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 
+1

用法在game.cpp文件中?在这个字符串之前没有'return'?请显示自包含的最小示例,演示问题(或显示一些game.cpp文件内容)。 – ForEveR 2013-03-20 08:58:39

+0

你是否声明'imagemanager'和你在相同的范围内使用它? – drewmm 2013-03-20 08:58:57

回答

3

它的警告,而不是错误。既然你不使用你的imagemanager对象,只声明它 - 你有这个警告。你可以使用例如 (void)imagemanager;,或者真的使用这个对象(在开发应用程序之前不注意这个警告)并且警告将会消失。

编辑:如何向我们展示此对象的用法?

+0

对不起!忘记告诉实际的问题:)我已编辑帖子 但是,无论如何感谢您的提示! – user2189967 2013-03-20 08:51:01

+0

@ user2189967请显示使用情况。 – ForEveR 2013-03-20 08:53:42

1

imagemanagerImagemanager类型的变量(对象)。

所以,警告是正确的。在代码中使用imagemanager或删除该行。

另请注意,C++区分大小写,所以Imagemanagerimagemanager之间有区别。

一个是代码中的类,另一个是该类型的对象。

+0

对不起!忘记告诉实际问题:)我已编辑帖子 – user2189967 2013-03-20 08:49:24