[英]How to use global const int variables from main class in another class
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:
我试过将const int变量放在.h文件中,并在主类和其他类中包含#include,但是values.h文件中出现此错误:
error C2370: 'LEVEL_HEIGHT' : redefiniton; different storage class
.h file: .h文件:
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: 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: 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
. 您应该使用
#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.
同样,在处理较大的项目时,请不要犹豫使用前向声明来加快编译时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.