如何包含两个包含两个具有相同名称的不同类的不同标头?

时间:2011-04-20 07:07:45

标签: visual-studio-2010 visual-c++ mfc mfc-feature-pack

我正在对旧的MFC应用程序进行一些更改。标题“stdafx.h”包括另一个标题“mfcextensions.h”,它定义了一个类“CMemDC”。在另一个标题中,我需要包含“afxtoolbar.h”,以便我可以使用类“CMFCToolBar”。问题是,“afxtoolbar.h”最终会包含“memdc.h”,它定义了一个类“CmemDC”。结果是可以理解的是2011年编译错误。

现在我可以控制定义“CMemDC”的现有代码,但这在很多地方使用,所以我宁愿不要太多改变它。

过来这个的最佳策略是什么?我猜我可以以某种方式使用命名空间,或者另一种方法是重命名我们现有的类“CMemDC”,但这更能避免问题而不是解决问题。

干杯

3 个答案:

答案 0 :(得分:2)

使用命名空间是正确的路线,但您可能还想查看为什么在整个应用程序中声明CMemDC。除非你真的需要在任何地方声明你的CMemDC,否则你可以从stdafx.h中删除include并且只包含真正需要它的cpp文件。

答案 1 :(得分:1)

C ++命名空间可能对您有所帮助。将至少一个CMemDC类放在合适的命名空间中,并在要使用每个类的名称中使用它们的完全限定名称。

您可以避免使用完全限定名称,并使用

在当前作用域中使名称空间使用全局
using namespace yournamespacename;

但是,这不太明确(就无法直接查看您在代码中的某个位置使用哪个CMemDC而言),如果您在同一范围内使用这两个类,则无法使用。

答案 2 :(得分:0)

如果您有2个具有相同名称的类,则最佳选择是使用名称空间。您也可以重命名您的课程。但所有这一切都在你的帖子中。所以你自己回答了问题。没有任何魔法可以帮助你,因为你已经遇到了名称冲突的常见问题,并引入了名称空间来解决这类问题。