情况:我正在尝试使用存储在主类中声明的变量中的数字,但是我需要在另一个类中使用它们。我已经尝试将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();
}
答案 0 :(得分:0)
您应该使用#pragma once
开始标题。这可以防止您的标题被多次包含。此外,当您处理更大的项目时,请毫不犹豫地使用前向声明来加快编译时间。