c++ - 声明/定义顺序依赖

标签 c++ class gcc forward-declaration

我有这样的代码(C++):

namespace models
{
    class model
    {
        private:
            ui::window* win;
    };
}

namespace ui
{
    class window
    {
        private:
            models::model* modl;
    };
}

如您所见,这是一个令人大喊大叫的 hell 。如您所知,这段代码无法编译,除非我在模型之前为 window 提供前向声明,通常这样做是不合理的,因为上面不是完整的代码,而且代码将会扩展。

是否有系统的方法来解决这个问题?

最佳答案

unless I provide a forward declaration for window before models, which is not rational to do so in general

事实上,它是。您应该尽可能使用前向声明而不是包含或完整定义。

但最重要的是,您的设计至少看起来很笨拙。

编辑:根据请求,带有前向声明的代码:

namespace ui
{
    class window;
}
namespace models
{
    class model
    {
        private:
            ui::window* win;
    };
}

//required if this is in a different file
namespace models
{
    class model;
}
namespace ui
{
    class window
    {
        private:
            models::model* modl;
    };
}

关于c++ - 声明/定义顺序依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597649/

相关文章:

performance - ccache的缺点

c++ - 关闭函数时返回 vs break?

C++ 错误 : output not defined in namespace

jQuery .hasClass 方法省略效果

python - 在 __init__ 中调用类函数

c++ - 已编译的 gcc 和 tcc 结构的兼容性

c - 将 void * 值设置为 intptr_t 变量是否需要显式转换?

c++ - 在预处理器条件中使用 bool 文字是否有效?

c++ - 两个其他方面相同的功能(一个使用模板模式,另一个不使用)

c++ - 尝试使用 std::sort 时出现以下错误:在模板中:调用的对象类型 'bool' 不是函数或函数指针