Могут ли два заголовка содержать классы с одинаковыми именами в C ++? - PullRequest
0 голосов
/ 10 ноября 2010

И оба будут включены в проект, если они находятся в разных пространствах имен?У меня проблема, просто включив их из-за двуличности ...

Ответы [ 4 ]

6 голосов
/ 10 ноября 2010

Да и нет.

Имя класса Foo в namespace1 равно "namespace1 :: Foo"

Имя класса Foo в namespace2is "namespace2 :: Foo"

Эти имена не идентичны - вы не можете иметь два одинаково именованных класса в разных пространствах имен.

Очевидно, что оба имеют локальное имя "Foo", и если вы сделаете что-то вроде

using namespace namespace1;
using namespace namespace2;

Foo x;

, тогда будет двусмысленность, как вы сказали компилятору игнорировать разныенемного имен.

Но пока вы не включите оба в область действия, вы можете использовать полное имя, чтобы использовать любое из них по своему желанию.

3 голосов
/ 10 ноября 2010

Да, если они находятся в разных пространствах имен, они на самом деле не имеют одно и то же имя.

Покажите нам свои заголовки и свой файл CPP, но, пожалуйста, сокращайте их!

0 голосов
/ 10 ноября 2010

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

Ваша проблема, вероятно, в другом месте ... как упоминалось выше, размещение кода облегчит людям диагностику проблемы.

0 голосов
/ 10 ноября 2010

Да, если они находятся в разных пространствах имен, вы не используете их оба в третьем месте ... Вы уверены, что проблема связана с именами, а не с циклическими ссылками?

...