C++ c++;sdl2文本不呈现
我有一个程序,其中包含一个类,我不知道如何使它工作。当我让代码在没有“错误”的情况下运行时,它不会在屏幕上显示任何文本 我在主循环中有一个来自这个类的对象,我在那里渲染它。从类中调用render()void函数 我找到了代码崩溃的地方。但我不知道为什么会这样 谢谢你的帮助 文本对象的类:(text.cpp) text.h文件:C++ c++;sdl2文本不呈现,c++,sdl-2,sdl-ttf,C++,Sdl 2,Sdl Ttf,我有一个程序,其中包含一个类,我不知道如何使它工作。当我让代码在没有“错误”的情况下运行时,它不会在屏幕上显示任何文本 我在主循环中有一个来自这个类的对象,我在那里渲染它。从类中调用render()void函数 我找到了代码崩溃的地方。但我不知道为什么会这样 谢谢你的帮助 文本对象的类:(text.cpp) text.h文件: #ifndef TEXT_H #define TEXT_H #include <iostream> #include <SDL2/SDL.h>
#ifndef TEXT_H
#define TEXT_H
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
class Text{
private:
SDL_Surface* surface;
SDL_Texture* texture;
TTF_Font* font;
SDL_Color color;
SDL_Rect rect;
public:
Text() {};
~Text();
void init(const char* text, int x, int y, int r, int g, int b, int size, SDL_Renderer *renderer);
void render(SDL_Renderer *renderer);
};
#endif //TEXT_H
\ifndef TEXT\u H
#定义文本
#包括
#包括
#包括
课文{
私人:
SDL_表面*表面;
SDL_纹理*纹理;
TTF_字体*字体;
SDL_颜色;
SDL_Rect;
公众:
Text(){};
~Text();
void init(常量字符*文本、整数x、整数y、整数r、整数g、整数b、整数大小、SDL_渲染器*渲染器);
无效渲染(SDL_渲染器*渲染器);
};
#endif//TEXT\u H
首先:在SDL函数的返回值上添加内部测试(如assert()
),如TTF_OpenFont
(如果失败则返回NULL)
其次:使用SDL\u GetError()
了解失败原因的详细信息
第三:在编译器中使用-g
选项,然后使用gdb
执行程序,它将提供有关程序崩溃位置的更多详细信息
假设:
SDL\u RenderPresent(渲染器)
谢谢,但是我不能用这个,因为程序在运行那些特定的行时崩溃了(我知道,因为我放了“cout”,看看它们在哪里打印或不打印消息)。也许我不明白这是怎么回事。错误发生在程序的执行过程中。。。我对SDL和C++很陌生,所以我可能没有做什么显而易见的事情。我使用相同的渲染器来创建和渲染它。在linux终端上,它显示:Violacióde segment(bolcat de la imatge del nucli),就像我在加泰罗尼亚语中使用的系统一样:I'v serched,它在英语中会说:segfault或其他什么similar@ovnijeroqui “我不能使用这个,因为程序在运行这些特定行时崩溃“可能在一些SDL函数返回错误代码后崩溃。也许在您的主函数中直接打印C语言的文本,看看它是否工作,如果没有,您做了一些错误的事情,如果不是C++类的话。inconsistent@ovnijeroqui检查您使用的SDL函数的文档。其中一些可能会失败,您必须检查它们的返回值才能检测到。例如,
SDL\u CreateTextureFromSurface
如果无法创建纹理,则可以返回0
,但您从未检查它是否返回非空。请检查,如果在main()函数中运行此函数,仅初始化SDL内容,是否也会崩溃?
#ifndef TEXT_H
#define TEXT_H
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
class Text{
private:
SDL_Surface* surface;
SDL_Texture* texture;
TTF_Font* font;
SDL_Color color;
SDL_Rect rect;
public:
Text() {};
~Text();
void init(const char* text, int x, int y, int r, int g, int b, int size, SDL_Renderer *renderer);
void render(SDL_Renderer *renderer);
};
#endif //TEXT_H