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

| 我正在对旧的MFC应用程序进行一些更改。标头“ stdafx.h”包括另一个标头“ mfcextensions.h”,它定义了类“ CMemDC \”。在另一个标头中,我需要包含\“ afxtoolbar.h \”,以便可以使用\“ CMFCToolBar \”类。问题是,\“ afxtoolbar.h \”最终将包括\“ memdc.h \”,它定义了一个类“ CmemDC \”。结果是可以理解的会出现编译错误2011。 现在,我确实可以控制定义“ CMemDC”的现有代码,但是该代码已在很多地方使用,因此我不希望对其进行过多更改。 解决这个问题的最佳策略是什么?我猜想我可以以某种方式使用名称空间,或者另一种选择是重命名我们现有的类“ CMemDC”,但这更多地是避免了该问题,而不是永久解决它。 干杯
已邀请:
使用名称空间是正确的方法,但您可能还想看看为什么在整个应用程序中都声明了CMemDC。除非您真的需要在任何地方声明CMemDC,否则您可能可以从stdafx.h中删除include并只包含确实需要它的cpp文件。
C ++名称空间可能会为您提供帮助。将至少一个CMemDC类放在合适的名称空间中,并在要使用每个类的地方使用其完全限定名称。 您可以避免使用完全限定的名称,并通过以下方式使名称空间的使用在当前范围内变为全局
using namespace yournamespacename;
但是,这不太明确(因为无法在代码中的某一点直接看到您正在使用哪个CMemDC),并且如果您在同一范围内使用两个类,则将无法使用。
如果您有两个同名的类,则最好的选择是使用名称空间。您也可以重命名您的班级。但是所有这些都已经在您的帖子中了。所以您已经回答了自己的问题。没有什么魔术可以帮助您,因为您一直困扰于名称冲突这一常见问题,并且引入了名称空间来解决此类问题。

要回复问题请先登录注册