在C ++中定义包含TTF_Font变量的向量时出现“未定义的大小”错误

问题描述 投票:0回答:1

我已经尝试在包含许多TTF_Font变量的类中定义一个向量,如下所示:std::vector<TTF_Font> *fonts = &std::vector<TTF_Font>();这给了我一个错误,指出“'_TTF_Font * const':未知大小。”我也尝试在括号内添加一个整数来定义大小,但这没有帮助。另外,我已经以相同的方式定义了多个其他变量(例如std::vector<int> *xposes = &std::vector<int>();),它们工作得很好。任何想法,我可以做什么来使包含字体的矢量工作(最好不必定义大小)?

c++ sdl-2 sdl-ttf
1个回答
3
投票

使用std::vector<int> *xposes = &std::vector<int>();创建矢量对象将无法正常工作,因为xposes设置为临时对象,之后会被销毁。在一些简单的情况下,程序可能仍然可以正常运行,具体取决于编译器,但它是未定义的行为,因为向量对象的析构函数被调用,而xposes是指向不再存在的对象的悬空指针。

相反应该使用std::vector<int> xposes;

TTF_Font是一种不透明的类型,这意味着它是一个struct,其定义不可用。因此,使用SDL_ttf的程序只能使用指针TTF_Font*。错误消息意味着sizeof(TTF_Font)不起作用,因此无法创建std::vector<TTF_Font>。相反,指针std::vector<TTF_Font*>的矢量将起作用。

© www.soinside.com 2019 - 2024. All rights reserved.