簡體   English   中英

如何在另一個類中使用來自主類的全局const int變量

[英]How to use global const int variables from main class in another class

情況:我試圖使用存儲在主類中聲明的變量中的數字,但是我需要在另一個類中使用它們。 我試過將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();
}

您應該使用#pragma once啟動標頭。 這樣可以防止您的標頭被多次包含。 同樣,在處理較大的項目時,請不要猶豫使用前向聲明來加快編譯時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM