0

古いMFCアプリケーションにいくつかの変更を加えています。ヘッダー「stdafx.h」には、クラス「CMemDC」を定義する別のヘッダー「mfcextensions.h」が含まれています。別のヘッダーに「afxtoolbar.h」を含めて、クラス「CMFCToolBar」を使用できるようにする必要があります。問題は、「afxtoolbar.h」に、クラス「CmemDC」を定義する「memdc.h」が最終的に含まれることです。その結果、当然のことながらコンパイルエラー2011が発生します。

これで、「CMemDC」を定義する既存のコードを制御できますが、これは多くの場所で使用されているため、あまり変更しないでください。

What is the best strategy for over coming this? I'm guessing that I could somehow use namespaces, or the other alternative is to rename our existing class "CMemDC" but this is more avoiding the problem rather than solving it for good.

Cheers

4

3 に答える 3

2

名前空間を使用するのが適切な方法ですが、アプリ全体で CMemDC が宣言されている理由も確認する必要があります。どこでもCMemDCを宣言する必要が本当にない限り、stdafx.hからインクルードを削除し、本当に必要なcppファイルにインクルードするだけで済むかもしれません。

于 2011-04-20T11:15:45.900 に答える
1

C++ 名前空間が役立つ場合があります。CMemDC クラスの少なくとも 1 つを適切な名前空間に配置し、それぞれを使用する場所で完全修飾名を使用します。

完全修飾名の使用を避け、名前空間の使用を現在のスコープでグローバルにすることができます

using namespace yournamespacename;

ただし、これはあまり明示的ではなく (コードのある時点で使用している CMemDC を直接確認できないという点で)、同じスコープで両方のクラスを使用する場合、これは機能しません。

于 2011-04-20T07:15:28.487 に答える
0

同じ名前のクラスが 2 つある場合、最適なオプションは名前空間を使用することです。また、クラスの名前を変更することもできます。しかし、それはすべてあなたの投稿にすでにあります。だからあなたは自分で質問に答えました。名前の競合という通常の問題に固執しており、この種の問題を解決するために名前空間が導入されたため、あなたを助ける魔法はありません。

于 2011-04-20T07:20:34.743 に答える