He creado una clase que muestra las etiquetas(GameLabel) usando openGL, me he metido 2 muy extraño errores que no he sido capaz de resolver.

error C2079: ‘displayPlayer’ utiliza la clase no definida ‘GameLabel’
IntelliSense: de tipo incompleta no está permitido

Aquí está mi código;

La función en Game.cpp que llama a la etiqueta de la clase

void Game::draw(SDL_Window *window)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear window

//draw player
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
  glVertex3f (xpos, ypos, 0.0); //first corner
  glVertex3f (xpos+xsize, ypos, 0.0); //second corner
  glVertex3f (xpos+xsize, ypos+ysize, 0.0); //third corner
  glVertex3f (xpos, ypos+ysize, 0.0); //fourth corner
glEnd();
GameLabel displayPlayer = new GameLabel(xpos+(xsize/2.0f), ypos+ysize, "Player");
//The ablove line is the one flagging the errors.

Ahora, aquí está la GameLabel.h.

#include <SDL_ttf.h>
#include <GL/glew.h>
#include <string>
#include "Game.h"
class GameLabel
{
public:
    GameLabel(float fx, float fy, char stri);
~GameLabel(void);
void textToTexture(const char * str,  SDL_Surface* stringImage);
void draw(SDL_Surface* stringImage);
friend class Game;

protected:
SDL_Surface stringImage;
private:
GLuint texID;
GLuint height;
GLuint width;
GLfloat x;
GLfloat y;
char str;
};

y, finalmente, GameLabel.cpp constructor

GameLabel::GameLabel(float fx, float fy, char stri)
{
x = fx;
y = fy;
str = stri;

}
  • pregunta tonta.. pero no incluyen la .h a la derecha? Son estos errores de compilación o simplemente intellisense errores?
  • Yo no soy este es su principal problema, pero GameLabel displayPlayer = new GameLabel(...); parece a mí. ¿Usted se olvide de una * a declarar displayPlayer como un puntero (por ejemplo,GameLabel * displayPlayer = new ...)?
  • Otro problema es que en su GameLabel constructor, el tercer argumento es un char, pero están tratando de utilizar una cadena de caracteres.
  • El tipo incompleta no se permite es un intelliSense de error, el otro es un complie de error. Tienes razón, yo lo hice para obtener un puntero, lo he añadido ahora, sin embargo, que no parecen haber efectuado el problema.
InformationsquelleAutor SweetDec | 2012-11-01

2 Comentarios

  1. 2

    Podría ser debido a la circular de dependencia? GameLabel incluye el juego.h.. y el juego parece depender de gamelabel así, hace el Juego.h incluir gamelabel.h?

    • Hola, no no no parecen ser circular dependencias…también he incluido Juego.h para la GameLabel clase, de modo que no parece ser que tampoco.
    • Tiene n GameLabel.h a Game.cpp o el Juego.h? a menos que sea necesario, prefieren agregar a Game.cpp, incluyendo a juego.h va a causar circular de dependencia
    • Incluyendo juego.h en el GameLabel.cpp parecía eleminate la intellisence error, gracias! Todavía no parece reconocer el constructor, aunque
    • tiene usted fija el 2 problemas se señaló en los comentarios? *displayPlayer y char *stri o std::string stri?
    • También si el amigo de la declaración de la clase es el único propósito de la inclusión de Juego.h en gamelabel.h, sugiero que se quite de ahí, amigo de la declaración de obras sin multa.
  2. 1

    Sobre todo tu .h archivos de escribir esto en la parte superior:

    #ifndef YOUR_FILE_NAME_H_
    #define YOUR_FILE_NAME_H_

    y esta en la parte inferior:

    #endif

    Reemplazar YOUR_FILE_NAME_H_ para el .h nombre de archivo que está en, preferiblemente con mayúsculas.

    Esto evitará un archivo de encabezado de ser incluido varias veces.

    • o simplemente #pragma once en la parte superior
    • Bien doke, hecho eso. No se ha librado de los errores, pero gracias 🙂
    • Hey solo una nota, #pragma once realmente no es estándar, aunque la mayoría de los compiladores de apoyo
    • ya true encontró que a mí mismo, pero estoy adivinando en el mejor de los hace el código más limpio, y si se mueve a un no apoyar compilador (raro) que no debe fallar en silencio.

Dejar respuesta

Please enter your comment!
Please enter your name here