简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM