Situation: I am trying to use figures stored in variables declared in the main class however I am required to use them in another class. I've tried putting the const int variables in a .h file and #include in the main class and the other class however this error which comes in the values.h file:
error C2370: 'LEVEL_HEIGHT' : redefiniton; different storage class
.h file:
int SCREEN_WIDTH = 640;
int SCREEN_HEIGHT = 480;
int SCREEN_BPP = 32;
//The frame rate
int FRAMES_PER_SECOND = 20;
//The dot dimensions
int PLAYER_WIDTH = 20;
int PLAYER_HEIGHT = 20;
//The dimensions of the level
const int LEVEL_WIDTH = 1280;
const int LEVEL_HEIGHT = 960;
main.cpp:
#include "SDL.h"
#include "Player.h"
#include "Values.h"
#include "LoadImage.h"
//The surfaces
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;
//The event structure
SDL_Event event;
Player player;
LoadImage game;
//The camera
SDL_Rect camera = { 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT };
bool init()
{
/****************/
/*Initialisation*/
/****************/
//Start SDL
if(SDL_Init( SDL_INIT_EVERYTHING) == -1)
{
return false;
}
//Set up Screen
screen = SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_BPP,SDL_SWSURFACE);
if ( screen == NULL)
{
return false;
}
//Set up window caption
SDL_WM_SetCaption("10 seconds", NULL);
return true;
}
void mainLoop()
{
bool quit = false;
//While the user hasnt quit
while (quit == false)
{
//Move the player
player.move();
//Set the camera
player.setCamera();
//Show the background
game.apply_surface(0,0,background, screen, &camera);
//Show the player on the screen
player.draw();
//Update screen
SDL_Flip(screen);
/*if (SDL_Flip(screen) == -1)
{
return 1;
}*/
}
}
void clean_up()
{
// SDL_FreeSurface(background);
player.clean();
//Quit SDL
SDL_Quit();
}
int main( int argc, char* args[] )
{
//Initialise SDL
if (init() == false)
{
return 1;
}
//player = new Player("player.png", screen);
//main loop
mainLoop();
clean_up();
return 0;
}
Player.cpp:
#include <iostream>
#include <string>
#include "Player.h"
#include "Values.h"
using namespace std;
void Player::move()
{
//Move the player left or right
x += xVel;
//if the player went too far to the left or right
if ((x < 0)||(x + PLAYER_WIDTH > LEVEL_WIDTH))
{
//move back
x -= xVel;
}
//Move player up or down
y += yVel;
//if the player went too far up or down
if ((y < 0)||(y + PLAYER_HEIGHT > LEVEL_HEIGHT))
{
//move back
y -= yVel;
}
}
void Player::setCamera()
{
//Center the camera over the player
camera.x = (x + PLAYER_WIDTH / 2) - SCREEN_WIDTH / 2;
camera.y = (y + PLAYER_HEIGHT / 2) - SCREEN_HEIGHT / 2;
//Keep the camera in bounds
if (camera.x < 0)
{
camera.x = 0;
}
if (camera.y < 0)
{
camera.y = 0;
}
if (camera.x > LEVEL_WIDTH - camera.w)
{
camera.x = LEVEL_WIDTH - camera.w;
}
if (camera.y > LEVEL_HEIGHT - camera.h)
{
camera.y = LEVEL_HEIGHT - camera.h;
}
}
void Player::draw()
{
//Show the player
image.apply_surface(x - camera.x, y - camera.y, player, screen);
}
void Player::clean()
{
image.clean();
}
You shoul start your headers with #pragma once
. This prevents your header to be included several times. Also, do not hesitate to use forward declarations to speed up compilation time when you work on bigger projects.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.