Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;sdl2文本不呈现_C++_Sdl 2_Sdl Ttf - Fatal编程技术网

C++ c++;sdl2文本不呈现

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>

我有一个程序,其中包含一个类,我不知道如何使它工作。当我让代码在没有“错误”的情况下运行时,它不会在屏幕上显示任何文本

我在主循环中有一个来自这个类的对象,我在那里渲染它。从类中调用render()void函数

我找到了代码崩溃的地方。但我不知道为什么会这样

谢谢你的帮助

文本对象的类:(text.cpp

text.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函数调用失败
  • 纹理是特定于渲染器的,这意味着用于创建纹理的渲染器是唯一可以渲染此纹理的渲染器
  • 要更新的渲染器,以显示使用
    SDL\u RenderPresent(渲染器)
  • 对于RGBA,有几种打印方法,确保纹理不透明,渲染器处于正确模式

  • 谢谢,但是我不能用这个,因为程序在运行那些特定的行时崩溃了(我知道,因为我放了“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