当前位置:  开发笔记 > 编程语言 > 正文

C++名称空间:交叉使用

如何解决《C++名称空间:交叉使用》经验,为你挑选了1个好方法。

请考虑以下示例.它由两个头文件组成,声明两个不同的名称空间:

// a1.h
#pragma once
#include "a2.h"

namespace a1 
{
    const int x = 10;
    typedef a2::C B;
}

第二个是

// a2.h    
#pragma once
#include "a1.h"

namespace a2 {
  class C {
  public:
    int say() {
      return a1::x; 
    }
  };
}

还有一个源文件main.cpp:

#include 
#include "a1.h"
#include "a2.h"

int main()
{
  a2::C c;
  std::cout << c.say() << std::endl;
}

这样它就不会编译(尝试过GCC和MSVC).错误是a1未声明名称空间(Windows上为C2653).如果您以main.cpp这种方式更改包含订单:

#include "a2.h"
#include "a1.h"

您会收到对称错误消息,即a2未声明命名空间.

有什么问题?



1> Greg Rogers..:

您需要在头文件中使用前向声明,因为您有一个循环引用.像这样的东西:

// a1.h
#pragma once

namespace a2 {
    class C;
}

namespace a1 
{
    const int x = 10;
    typedef a2::C B;
}

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有