Ошибка «Неопределенный размер» при определении вектора, содержащего переменные TTF_Font в C ++ - PullRequest
0 голосов
/ 13 апреля 2019

Я попытался определить вектор в классе, содержащем несколько переменных TTF_Font, например: std::vector<TTF_Font> *fonts = &std::vector<TTF_Font>(); Это дает мне сообщение об ошибке "_TTF_Font * const: неизвестный размер". Я также попытался добавить целое число в скобках, чтобы определить размер, но это не помогает. Кроме того, я определил несколько других переменных таким же образом (например, std::vector<int> *xposes = &std::vector<int>();), и они отлично работают. Любая идея относительно того, что я мог бы сделать, чтобы вектор, содержащий шрифты, работал (желательно без определения размера)?

1 Ответ

3 голосов
/ 13 апреля 2019

Создание векторного объекта с использованием 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*>.

...