嵌套命名空间中的Forward声明

时间:2012-02-11 23:05:44

标签: c++ namespaces

我在嵌套命名空间中遇到前向声明问题。我在嵌套命名空间中为类或结构放置了一个前向声明,当我尝试在该命名空间的父级中使用它时,我得到一个错误。我不知道该怎么做。

这就是代码的样子:

#include "Data\Types.hpp"

namespace GameEngine
{
    class Console
    {
    public:
        class Renderer : public RenderComponent2D
        {
        public:
            Renderer(Console*, const GameEngine::DataProcessing::FontData*);
//...

并在Data \ Types.hpp中:

namespace GameEngine
{
    namespace DataProcessing
    {
        struct FontData;
//...

并且MinGW给出的错误是:

'FontData' in namespace 'GameEngine::DataProcessing' does not name a type

感谢您对此问题的任何帮助或建议。

2 个答案:

答案 0 :(得分:2)

我最近遇到了一个类似的问题,结果是一个未封闭的命名空间,例如

namespace A {
    namespace B {
        class C {};
// failed to close both namespaces properly here

让我离开的一点是,未封闭的命名空间实际上是在我的cpp文件中包含的辅助文件中。尝试在标题中查看是否有任何未关闭的命名空间。

答案 1 :(得分:1)

可能是方法声明中的问题。您已进入GameEngine命名空间:

namespace GameEngine
{
    class Console

但是在声明中你也使用了这个命名空间:

 Renderer(Console*, const GameEngine::DataProcessing::FontData*);

没有GameEngine尝试:

 Renderer(Console*, const DataProcessing::FontData*);