C++, предварительное объявление типа, находящегося в пространстве имен

126
07 июня 2021, 19:00

Рассмотрим код:

MyClass.hpp:

class Texture;
class MyClass
{
    public:
    void setTexture(Texture *_texture);
    private:
    Texture *texture;
};

MyClass.cpp:

#include <SFML/Graphic.hpp>
#include "MyClass.hpp"
using namespace sf;
void MyClass::setTexture(Texture *_texture)
{
    texture = _texture;
}

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

Так как в заголовочном файле я делаю предварительное объявление class Texture, то компилятор сообщает о том, что в MyClass.cpp идентификатор Texture является неоднозначным.

При этом, компилятор запрещает предварительное объявление вида class sf::Texture.

Я не совсем понимаю, как правильно сделать предварительное объявление типа, который находится в каком-либо пространстве имен...

Answer 1

Предварительное объявление

namespace sf
{
  class Texture;
}

Однако никакого "хорошего тона" в попытках тотального перехода на предварительные объявления я не вижу.

READ ALSO
C++, include или forward-declaration в заголовках

C++, include или forward-declaration в заголовках

Существует два противоположных мнения, относительно включения одних заголовков в другие

107
Разбиение на блоки по битам

Разбиение на блоки по битам

Занимаюсь реализацией алгоритма ГОСТ 28147-89Например, есть ключ 256 бит:

268
Доступ к вложенным элементам из управляющего класса

Доступ к вложенным элементам из управляющего класса

Есть такой код, описывающий вложенные списки:

103
Подсчет вложенных тегов

Подсчет вложенных тегов

Не могу разобраться почему не считает, вроде отладчиком прошелся посмотреть чему равен lidataset

241