我在命名空间中声明了一个类:
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'
关于我所缺少的任何想法吗?
谢谢
答案 0 :(得分:2)
此语法无效,因为PixelViewer
既可以是名称空间,也可以是类名。因此语法是不允许的:
class PixelViewer::FBO; // disallowed
相反,只需在相应的名称空间中添加前向声明:
namespace PixelViewer {
class FBO;
}
答案 1 :(得分:1)
是的,您必须在名称空间中进行前向声明:
namespace PixelViewer
{
class FBO;
}
请记住,它可能是名称空间,类或结构,因此编译器必须知道应该在内部使用哪个名称。