我有一个包含多个类的程序,并且我们将它们全部链接在一个主标题中:
#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”。我知道我使用前向声明并同时包含但这种方式给了我最少的错误,只是使用包含或前向声明给出了更多的错误。我在标题中声明这些的原因是因为它们被用在其他每个类中。
纹理类我刚从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链接到工作纹理类
,为什么LTexture未定义我尝试将所有外部定义放在一个cpp中,我发现它只是从一个cpp中删除了错误。因此,我将所有定义分解为需要它们的特定类,但是它们仍然需要多个,并且两次声明它们也会导致错误。那么我如何链接标题是一个问题?我设置标题的方式是每个cpp引用它的标题然后标题引用main.h.使用main.h引用其他每个标题
答案 0 :(得分:0)
您无法使用未定义(前向声明)类型定义变量,因为编译器不知道它们应该有多大或者如何调用它们的构造函数/析构函数。
此外,你所做的工作,每个.cpp都有自己的变量副本。你想要的是extern LTexture gTileTexture;
并将定义放在一个.cpp。