C++ 错误:不允许指向不完整类类型的指针。信用证++
因此,我是SDL新手,在我的代码中,我遇到了以下错误: 不允许指向不完整类类型的指针 代码如下: main.cpp events.cppC++ 错误:不允许指向不完整类类型的指针。信用证++,c++,class,pointers,sdl,C++,Class,Pointers,Sdl,因此,我是SDL新手,在我的代码中,我遇到了以下错误: 不允许指向不完整类类型的指针 代码如下: main.cpp events.cpp 编译events.cpp时会出现该错误,因为events.h在使用SDL数据类型之前不包含SDL.h。然后在events.cpp中,events.h之后包含SDL.h,因此出现错误。SDL\u*ro;SDL_纹理*至;SDL_表面*so;SDL_窗口*wo;都是指向可能抽象类的未初始化指针。你的意思是不是创造一些事件,例如ev;然后调用SDL_FreeSurf
编译events.cpp时会出现该错误,因为events.h在使用SDL数据类型之前不包含SDL.h。然后在events.cpp中,events.h之后包含SDL.h,因此出现错误。SDL\u*ro;SDL_纹理*至;SDL_表面*so;SDL_窗口*wo;都是指向可能抽象类的未初始化指针。你的意思是不是创造一些事件,例如ev;然后调用SDL_FreeSurfaceev.getImage;?这完全是错误的。在使用SDL之前,你需要学习C++基础知识。在事件构造函数中,您将渲染器、纹理等创建为局部变量,当构造函数完成时,这些变量将超出范围。渲染器等的成员变量将被取消初始化。最后,在main函数中再次声明了它们,但从未向它们分配任何内容,并且正在从它们调用甚至不存在的函数。
#include <SDL.h>
#include "events.h"
int main(int argc, char ** argv)
{
SDL_Renderer* ro;
SDL_Texture* to;
SDL_Surface* so;
SDL_Window* wo;
SDL_FreeSurface(so->getImage());
SDL_SetRenderDrawColor(ro->getRenderer(), 255, 255, 255, 255); // error here
// handle events
events mo;
mo.handleEvents();
// cleanup SDL
SDL_DestroyTexture(to->getTexture()); // error here
SDL_DestroyRenderer(ro->getRenderer()); // error here
SDL_DestroyWindow(wo->getWindow()); // error here
SDL_Quit();
return 0;
}
#pragma once
class events
{
public:
events();
void handleEvents();
SDL_Renderer* getRenderer();
SDL_Texture* getTexture();
SDL_Surface* getImage();
SDL_Window* getWindow();
~events();
private:
SDL_Event event;
int x;
int y;
bool quit;
SDL_Renderer *renderer;
SDL_Texture *texture;
SDL_Surface *image;
SDL_Window *window;
};
#include "events.h"
#include <SDL.h>
events::events()
{
SDL_Event event;
int x = 288;
int y = 208;
bool quit = false;
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image);
SDL_Surface *image = SDL_LoadBMP("face.bmp");
SDL_Window *window = SDL_CreateWindow("SDL2 Keyboard/Mouse events", SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
}
events::~events()
{
}
void events::handleEvents(){
SDL_Init(SDL_INIT_VIDEO);
while (!quit)
{
SDL_Delay(10);
SDL_PollEvent(&event);
switch (event.type)
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_LEFT:
x -= 5;
break;
case SDLK_RIGHT:
x += 5;
break;
case SDLK_UP:
y -= 5;
break;
case SDLK_DOWN:
y += 5;
break;
}
break;
}
SDL_Rect dstrect = { x, y, 64, 64 };
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, texture, NULL, &dstrect);
SDL_RenderPresent(renderer);
}
}
SDL_Renderer* events::getRenderer(){
return renderer;
}
SDL_Texture* events::getTexture(){
return texture;
}
SDL_Surface* events::getImage(){
return image;
}
SDL_Window* events::getWindow(){
return window;
}