如何在另一个类的主类中使用全局const int变量

时间:2013-08-24 11:38:36

标签: c++ sdl

情况:我正在尝试使用存储在主类中声明的变量中的数字,但是我需要在另一个类中使用它们。我已经尝试将const int变量放在主类中的.h文件和#include中,而另一个类则将这个错误放在values.h文件中:

error C2370: 'LEVEL_HEIGHT' : redefiniton; different storage class

.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中:

#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();
}

1 个答案:

答案 0 :(得分:0)

您应该使用#pragma once开始标题。这可以防止您的标题被多次包含。此外,当您处理更大的项目时,请毫不犹豫地使用前向声明来加快编译时间。