我有两个源文件,一个名为main.cpp(定义了 namespace M的地方)和文件engines.h(定义了几个名称)。main.cpp包括engines.hengines.h需要使用M内的内容,而M需要使用engines.h内的内容。

我在using namespace M;中执行engines.h时遇到错误。

最佳答案

您不能在定义 namespace 之前执行using namespace M。如果存在循环依赖性,则需要使用一种或多种技术来解决

  • 转发声明您的用法是否不需要知道类的成员或大小,而只需使用指针或对它们的引用进行处理:
    namespace M { class MyCow; }
    
  • 在engines.cc中定义内容
    // engines.h
    void f();
    
    // engines.cpp
    #include "main.h"
    void f() { MyCow muuh; }
    
  • 使用pimpl idiom可以进一步减少依赖关系,因为它使 header 中没有仅由实现使用的 header 。.

  • 将.h文件拆分为接口(interface),将.cpp文件拆分为用于处理此类依赖关系的实现。这样,头文件就较少依赖于其他头文件,并且实现文件可以包含这些头文件。

    关于c++ - namespace 的可见性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3186540/

    10-10 02:22