最近遇到一个编译问题, 耗费了点时间才找到原因, 现在记录一下, 下次很快就能搞定类似问题了。

      某基础功能库提供了test.h文件和libtest.a文件供外部调用, 在业务层比较成熟的A模块中, 需要用到test.h中的一个类Student,  在A模块中,包含了test.h, 然后指定了libtest.a,  编译、调用OK. 

     而我要搭建一个新的B模块, 也要用到test.h中的类Student, 于是包含test.h并在makefile中指定libtest.a,  然而, 在编译的时候, error提示Student没有定义.  这显然不是没有找到头文件test.h或者libtest.a库, 想了一下, 没有找到原因, 好吧, 那就去test.h看看。 一看, 傻眼了, 原来Student类被两层的namespace包含着, 裹得紧紧的, 夹得紧紧的。 看来, 需要加上名空间。

      回头再看看A模块, 果然已经有了using namespace test1; using namespace test1::test2;   于是, 在B模块中也加上这个, 然后就OK了。


      问题虽小, 仍需注意, 毕竟耗了好几分钟呢!




本文转载:CSDN博客