如何包含两个不同的包含两个具有相同名称的不同类的头?
我正在对旧的MFC应用程序进行一些更改。头文件“stdafx.h”包含另一个定义类“CMemDC”的头文件“mfcextensions.h”。在另一个头文件中,我需要包含“afxtoolbar.h”,以便我可以使用类“CMFCToolBar”。问题是,“afxtoolbar.h”最终将包含定义类“CmemDC”的“memdc.h”。结果是可以理解地得到编译错误2011.如何包含两个不同的包含两个具有相同名称的不同类的头?
现在我确实控制了我们现有的定义“CMemDC”的代码,但是这在很多地方使用,所以我宁愿不要更改太多。
这是为什么最好的策略?我在猜测我可以以某种方式使用名称空间,或者另一种方法是重命名我们现有的类“CMemDC”,但这更好地避免了问题,而不是解决问题。
Cheers
C++名称空间可能会对您有所帮助。至少将其中一个CMemDC类放入合适的名称空间中,并在您想要使用它们的全限定名称的情况下使用它们。
可以尽量避免使用完全合格的名称,并命名空间使用全球在目前的范围与
using namespace yournamespacename;
然而,这是不太明确的(在不能够直接看到哪些CMemDC类是条件你在代码中使用某一点),并且如果你在同一个作用域中使用这两个类,这将不起作用。
如果你有两个同名的类,最好的选择是使用名称空间。你也可以重命名你的课程。但是,所有这些都已经在你的帖子中。所以你自己回答了问题。没有什么魔法可以帮助你,因为你一直坚持名称冲突的常见问题,并且引入了命名空间来解决这类问题。
使用名称空间是正确的路线,但您可能也想看看为什么CMemDC在整个应用程序中声明。除非你真的需要你的CMemDC在任何地方声明,否则你可能会从stdafx.h中移除包含,并且只包含真正需要它的cpp文件。
我简化了这个问题,“mfcextensions.h”包含了一大堆最终包含“memdc.h”的其他文件。我开始沿着这条路走下去,因为它可能是最简单的解决方案,但也有不少地方使用它。我想我会用CMemDC修改这个库并将它添加到一个名称空间中 – Steiny 2011-04-20 21:58:16
命名空间是** **名称冲突的解决方案(重命名除外)。 – 2011-04-20 07:20:57