我使用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
用法在game.cpp文件中?在这个字符串之前没有'return'?请显示自包含的最小示例,演示问题(或显示一些game.cpp文件内容)。 – ForEveR 2013-03-20 08:58:39
你是否声明'imagemanager'和你在相同的范围内使用它? – drewmm 2013-03-20 08:58:57