2015-11-25 58 views
0

我有幾個類和IVE一個程序在一個主頭部連接它們放在一起:標識符包括報頭之後使用未定義類

#ifndef __MAIN_H_INCLUDED__ 
#define __MAIN_H_INCLUDED__ 

//Using SDL, SDL_image, standard IO, strings, and file streams 

#include <SDL.h> 
#include <SDL_image.h> 
#include <stdio.h> 
#include <string> 
#include <fstream> 
#include "ltexture.h" 
#include "tile.h" 
#include "player.h" 
#include "enemy.h" 
#include "egg.h" 

我然後有一個鏈接在每個這些頭標對main.h文件。除了當我試圖聲明

class LTexture; 
LTexture gTileTexture; 
LTexture gPlayerSpriteSheetTexture; 
LTexture gEnemySpriteSheetTexture; 
LTexture gEggSpriteSheetTexture; 

我讓他們每個人都使用一個未定義類「LTexture」一切都連接在一起。我知道即時通訊使用前向聲明和包括在同一時間,但這種方式給了我最少的錯誤,只是使用包含或轉發聲明給了更多的錯誤。在頭文件中聲明這些的原因是因爲它們被用在其他類中。

結構類IM剛剛從lazyfoo的教程

#ifndef __LTEXTURE_H_INCLUDED__ 
#define __LTEXTURE_H_INCLUDED__ 

#include "main.h" 

class LTexture 
{ 
public: 
    //Initializes variables 
    LTexture(); 

    //Deallocates memory 
    ~LTexture(); 

    //Loads image at specified path 
    bool loadFromFile(std::string path); 

    //Creates image from font string 
    bool loadFromRenderedText(std::string textureText, SDL_Color textColor); 

    //Deallocates texture 
    void free(); 

    //Set color modulation 
    void setColor(Uint8 red, Uint8 green, Uint8 blue); 

    //Set blending 
    void setBlendMode(SDL_BlendMode blending); 

    //Set alpha modulation 
    void setAlpha(Uint8 alpha); 

    //Renders texture at given point 
    void render(int x, int y, SDL_Rect* clip = NULL, double angle = 0.0, SDL_Point* center = NULL, SDL_RendererFlip flip = SDL_FLIP_NONE); 

//Gets image dimensions 
int getWidth(); 
int getHeight(); 

private: 
    //The actual hardware texture 
    SDL_Texture* mTexture; 

    //Image dimensions 
    int mWidth; 
    int mHeight; 
}; 

#endif 

使用爲什麼LTexture不確定的,如果我有它連接到一個工作結構類

我試圖把所有的extern定義在一個CPP什麼我發現它是從那一個cpp中刪除錯誤。所以我把所有的定義分割成了他們需要的特定類,然而他們仍然需要多於一個,並且聲明它們兩次也會導致錯誤。那麼,我如何鏈接標題是一個問題?我設置我的頭文件的方式是每個cpp引用其頭文件,然後頭文件引用main.h.使用main.h引用其他所有頭文件

+0

OT:http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier –

+0

所以是錯誤,因爲額外的__在前面定義語句 – MolerC

+0

不太可能,這只是一句話。你也不能在btw結尾有'__'。 –

回答

0

由於編譯器不知道應該有多大或如何調用它們的構造函數/析構函數,因此無法定義具有未定義(前向聲明)類型的變量。

此外,您所做的不會工作,每個.cpp都會有自己的變量副本。你想要的是extern LTexture gTileTexture;並把定義放在一個.cpp中。