Как мне включить два разных заголовка, которые содержат два разных класса с одинаковыми именами? - PullRequest
0 голосов
/ 20 апреля 2011

Я делаю некоторые изменения в старом приложении MFC. Заголовок "stdafx.h" включает в себя другой заголовок "mfcextensions.h", который определяет класс "CMemDC". В другом заголовке мне нужно включить «afxtoolbar.h», чтобы я мог использовать класс «CMFCToolBar». Проблема в том, что «afxtoolbar.h» будет в конечном итоге включать «memdc.h», который определяет класс «CmemDC». В результате понятно, что получить ошибку компиляции 2011 года.

Теперь у меня есть контроль над нашим существующим кодом, который определяет «CMemDC», но он используется во многих местах, поэтому я бы не стал слишком сильно его менять.

Какова лучшая стратегия для преодоления этого? Я предполагаю, что я мог бы каким-то образом использовать пространства имен, или другой альтернативой является переименование нашего существующего класса «CMemDC», но это больше помогает избежать проблемы, чем решить ее навсегда.

Приветствия

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

Использование пространств имен - правильный путь, но вы, вероятно, также захотите посмотреть, почему CMemDC объявляется во всем приложении.Если вам действительно не нужно, чтобы ваш CMemDC был объявлен везде, вы можете избежать удаления include из stdafx.h и просто включения в файлы cpp, которые действительно нуждаются в нем.

1 голос
/ 20 апреля 2011

Пространства имен C ++ могут вам помочь. Поместите хотя бы один из классов CMemDC в подходящее пространство имен и используйте их полностью определенные имена там, где вы хотите использовать каждый из них.

Вы можете избежать использования полностью определенных имен и сделать использование пространства имен глобальным в текущей области с помощью

using namespace yournamespacename;

Однако, это менее явно (с точки зрения невозможности непосредственно увидеть, какой CMemDC вы используете в одной точке кода), и в случае, если вы используете оба класса в одной и той же области, это не будет работать.

0 голосов
/ 20 апреля 2011

Если у вас 2 класса с одинаковыми именами, лучше всего использовать пространства имен. Также вы можете переименовать свой класс. Но все это уже есть в вашем посте. Итак, вы сами ответили на вопрос. Нет волшебства, которое может помочь вам, потому что вы застряли с обычной проблемой столкновения имен, и для решения таких проблем были введены пространства имен.

...