参数中的C ++转发名称空间声明

时间:2019-02-06 16:13:37

标签: c++ namespaces

我在命名空间中声明了一个类:

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 :(得分:2)

此语法无效,因为PixelViewer既可以是名称空间,也可以是类名。因此语法是不允许的:

class PixelViewer::FBO; // disallowed

相反,只需在相应的名称空间中添加前向声明:

namespace PixelViewer {
    class FBO;
}

答案 1 :(得分:1)

是的,您必须在名称空间中进行前向声明:

namespace PixelViewer
{
    class FBO;
}

请记住,它可能是名称空间,类或结构,因此编译器必须知道应该在内部使用哪个名称。