прямое объявление пространства имен c ++ в параметре - PullRequest
0 голосов
/ 06 февраля 2019

Я получил класс, объявленный в пространстве имен:

namespace PixelViewer
{
  class FBO
  { ... }
}

, и я хочу использовать его в качестве параметра в другом методе класса следующим образом:

Model.h

class ShaderProgram;
class PixelViewer::FBO;

class Model
{
 void Model::render(ShaderProgram& shaderProgram, PixelViewer::FBO& fbo)
}

Model.cxx

#include "../FBO.h"
#include "../ShaderProgram/ShaderProgram.h"

void Model::render(ShaderProgram& shaderProgram, PixelViewer::FBO& fbo)

Однако я получаю следующие ошибки:

'PixelViewer' is not a class or namespace name

'FBO' uses undefined class PixelViewer

use of undefined type 'PixelViewer'

Любые идеи о том, что мне не хватает?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Да, вы должны сделать предварительное объявление в пространстве имен:

namespace PixelViewer
{
    class FBO;
}

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

0 голосов
/ 06 февраля 2019

Этот синтаксис недопустим, поскольку PixelViewer может быть как пространством имен, так и именем класса.Поэтому синтаксис запрещен:

class PixelViewer::FBO; // disallowed

Вместо этого просто добавьте предварительное объявление в соответствующее пространство имен:

namespace PixelViewer {
    class FBO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...