0

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

现在我确实可以控制我们现有的定义“CMemDC”的代码,但这在很多地方都有使用,所以我不想做太多的改变。

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

干杯

4

3 回答 3

2

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

于 2011-04-20T11:15:45.900 回答
1

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

您可以避免使用完全限定名称,并在当前范围内使用全局命名空间

using namespace yournamespacename;

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

于 2011-04-20T07:15:28.487 回答
0

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

于 2011-04-20T07:20:34.743 回答