Библиотека C ++ Thor - проблема с использованием класса загрузчика ресурсов ('' не называет тип) - PullRequest
0 голосов
/ 04 ноября 2018

Недавно я практиковался в управлении несколькими объектами и рисовании их в C ++ с использованием библиотеки SFML. Я хотел, чтобы мои текстуры и будущие ресурсы были более пригодными для повторного использования, поэтому я решил использовать библиотеку Thor , которая очень хорошо соответствует моим потребностям.

Итак, я написал первые несколько строк кода на основе того, что вы можете найти в этого урока , а компилятор всегда говорит:

main.cpp|12|error: 'textures_holder' does not name a type

Эта строка выдает ошибку:

textures_holder.acquire("Dirt", thor::Resources::fromFile<sf::Texture>("Textures\\dirt_block.png"));

Я использую Code :: Blocks IDE с компилятором MinGW и SFML 2.5.0.

Вот мой main.cpp и заголовочный файл, который содержит внешний объект:

//...
#include <Thor/Resources.hpp>
#include "Dirt_Block.h"

using namespace std;

//Adding textures to the texture library 
//THIS LINE GIVES AN ERROR
textures_holder.acquire("Dirt", thor::Resources::fromFile<sf::Texture>("Textures\\dirt_block.png"));

//Rest of code...

Dirt_Block.h (только верхняя часть):

#ifndef DIRT_BLOCK_H
#define DIRT_BLOCK_H

#include <SFML\Graphics.hpp>
#include <vector>
#include <Thor/Resources.hpp>
#include <Thor/Resources/SfmlLoaders.hpp>

extern sf::Vector2u screenRes;
extern thor::ResourceHolder<sf::Texture, std::string> textures_holder;
//Rest of the code

Я хотел бы знать, что является причиной этой ошибки, и, возможно, помочь другим, которые могут испытывать аналогичные проблемы разочарования. Спасибо за помощь.

РЕДАКТИРОВАТЬ:

Как указано в комментарии, я объявил несколько extern int переменных в Dirt_Block.h , так что теперь это выглядит так:

//...
extern int test_int_up;
extern sf::Vector2u screenRes;
extern thor::ResourceHolder<sf::Texture, std::string> textures_holder;
extern int test_int_d;
//...

А затем присвоил им некоторое значение в main.cpp :

//...
test_int_up = 55;
test_int_d = 55;
//Adding textures to the texture library
textures_holder.acquire("Dirt", thor::Resources::fromFile<sf::Texture>("Textures\\dirt_block.png"));
//...

Но компилятор выдает ошибку:

main.cpp|9|error: 'test_int_up' does not name a type
main.cpp|10|error: 'test_int_d' does not name a type
main.cpp|12|error: 'textures_holder' does not name a type

1 Ответ

0 голосов
/ 04 ноября 2018

Гораздо меньше отвлекает, чтобы увидеть, в чем ваша проблема без всего постороннего кода!

Программы на C ++ не запускаются с начала файла и запускают код до конца. Они начинаются с main (), и оттуда продолжается поток управления, при котором одно вызывает другое.

(Примечание: это не учитывает глобальный порядок конструктора , который идет в порядке объявления - но вы не можете гарантировать, что объявления заказов из «разных файлов» могут обкатка.)

Дело в том, что вы не можете просто делать случайные вызовы функций или методов в середине файла. Вот где вы размещаете декларации. Вы должны быть внутри функции или метода, чтобы делать вызовы, например

int main() {
    textures_holder.acquire(
        "Dirt",
        thor::Resources::fromFile<sf::Texture>("Textures\\dirt_block.png")
    );
    ...
}
...