向量的静态数组,包括类头[C ++]

时间:2018-12-09 16:21:35

标签: c++

我遇到了这个问题,看起来我没有在类定义中包含标头,但是我确实做到了。

文件代码(GB.h)

#pragma once

#ifndef GB_H
#define GB_H

#include "CIMG.h"
#include <vector>

class GB { public:
    static void GB_Init();
    static void GB_Quit();
    static std::vector <CIMG*> sprite_sheet[4]; };

#endif // GB_H

文件代码(GB.cpp)

#include "GB.h"

std::vector <CIMG*> GB::sprite_sheet[4];

void GB::GB_Init()
{
    sprite_sheet[0].push_back(new CIMG("images\\bg_all.png"));
    sprite_sheet[0].push_back(new CIMG("images\\game_bg.png"));

    sprite_sheet[1].push_back(new CIMG("images\\button_type_1_normal.png"));
    sprite_sheet[1].push_back(new CIMG("images\\button_type_1_hover.png"));
    sprite_sheet[1].push_back(new CIMG("images\\button_type_1_onclick.png"));

    sprite_sheet[2].push_back(new CIMG("images\\button_type_2_normal.png"));
    sprite_sheet[2].push_back(new CIMG("images\\button_type_2_hover.png"));
    sprite_sheet[2].push_back(new CIMG("images\\button_type_2_onclick.png"));

    sprite_sheet[3].push_back(new CIMG("images\\apple.png"));
    sprite_sheet[3].push_back(new CIMG("images\\rock.png"));
    sprite_sheet[3].push_back(new CIMG("images\\head_d.png"));
    sprite_sheet[3].push_back(new CIMG("images\\head_u.png"));
    sprite_sheet[3].push_back(new CIMG("images\\head_l.png"));
    sprite_sheet[3].push_back(new CIMG("images\\head_r.png"));
    sprite_sheet[3].push_back(new CIMG("images\\tail_d.png"));
    sprite_sheet[3].push_back(new CIMG("images\\tail_u.png"));
    sprite_sheet[3].push_back(new CIMG("images\\tail_l.png"));
    sprite_sheet[3].push_back(new CIMG("images\\tail_r.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_h.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_v.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_dl.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_dr.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_ul.png"));
    sprite_sheet[3].push_back(new CIMG("images\\body_ur.png"));
}

void GB::GB_Quit()
{
    for (int i = 0; i!=4; i++)
    {
        for (int s = 0; s!=sprite_sheet[i].size(); s++) delete sprite_sheet[i][s];
    }
}

文件代码(CIMG.h)

#pragma once

#ifndef CIMG_H
#define CIMG_H

#include "Core.h"
#include <SDL.h>
#include <SDL_image.h>
#include <string>

class CIMG
{
private:
    SDL_Texture * texture;
public:
    CIMG(std::string path);
    ~CIMG();

    void render(SDL_Rect * src, SDL_Rect * dst);
    void color_mod(Uint8 r, Uint8 g, Uint8 b);
};

#endif // IMG_H

文件代码(CIMG.cpp)

#include "CIMG.h"

CIMG::CIMG(std::string path)
{
    SDL_Surface * temp = NULL;
    temp = IMG_Load(path.c_str());
    if (temp==NULL)
    {
        SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, IMG_GetError());
        Core::status = false;
        return;
    }
    texture = NULL;
    texture = SDL_CreateTextureFromSurface(Core::rR, temp);
    if (texture==NULL)
    {
        SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, SDL_GetError());
        Core::status = false;
        return;
    }
}

CIMG::~CIMG()
{
    SDL_DestroyTexture(texture);
}

void CIMG::render(SDL_Rect * src, SDL_Rect * dst)
{
    SDL_RenderCopy(Core::rR, texture, src, dst);
}

void CIMG::color_mod(Uint8 r, Uint8 g, Uint8 b)
{
    SDL_SetTextureColorMod(texture, r, g, b);
}

我认为向量定义有问题,但是我找不到它。此外,在该项目之前,我在添加标头时发生了类似的错误,但是在编写过程中已通过某种方式解决了这些错误。编译器说的是:

  

内部版本:在Just_Snake中调试(编译器:GNU GCC编译器)

     

C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ GB.h错误:“ CIMG”不是   在此范围内声明

     

C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ GB.h错误:模板参数1   无效

     

C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ GB.h错误:   模板参数2无效

     

构建完成:3个错误,0个   警告(0分钟,0秒)

所有与线路有关的错误:

static std::vector <CIMG*> sprite_sheet[4];

更多信息:

  

--------------构建:在Just_Snake中调试(编译器:GNU GCC>编译器)---------------

     

mingw32-g ++。exe -Wall -std = c ++ 11 -IC:\ SDL_library \ include \ SDL2 -c   C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ CIMG.cpp -o obj \ Debug \ CIMG.o

     

mingw32-g ++。exe -Wall -std = c ++ 11 -IC:\ SDL_library \ include \ SDL2 -c   C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ FB.cpp -o obj \ Debug \ FB.o

     

在文件中   包含在C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ Core.h:14:0中,                    从C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ CIMG.h:6,                    从C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ CIMG.cpp:1:

     

C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ GB.h:14:25:错误:'CIMG'不是   在此范围内声明        静态std :: vector sprite_sheet [4];

     

C:\ Users \ SAWICKI \ Desktop \ Just_Snake \ GB.h:14:30:错误:模板   参数1无效        静态std :: vector sprite_sheet [4];

                         ^ C:\Users\SAWICKI\Desktop\Just_Snake\GB.h:14:30: error: template
     

参数2无效

     

进程终止,状态为1(0分钟,0   秒)

     

进程终止,状态为0(0分钟,0   秒)3个错误,0个警告(0分钟,0秒)

(Core.h)的代码

#pragma once

#ifndef CORE_H
#define CORE_H


#include <SDL.h>
#include <SDL_image.h>
#include <SDL_ttf.h>
#include <SDL_mixer.h>
#include "CFG.h"
#include "Input.h"
#include "SC.h"
#include "GB.h"
#include "enum.h"
#include "Map.h"

class Core
{
private:
    SDL_Window * w;

    SDL_Event * e;

    void input();
    void update();
    void draw();

public:
    Core();
    ~Core();

    static SDL_Renderer * rR;

    void main_loop();

    static Map * m;

    static bool status;
};

#endif // CORE_H

0 个答案:

没有答案