Лучший способ убрать столкновение имен в с ++ - PullRequest
2 голосов
/ 03 декабря 2011

Я только что перешел с WinXP на Seven, и мне пришлось добавить Windows SDK в мой проект, чтобы он компилировался.

Пока все хорошо, но мой второй проект наткнулся на загвоздку, PlayerState используется вмой проект как класс и в Windows SDK (Effects.h) как перечисление, и это, очевидно, генерирует ошибку (ошибка C2011: «PlayerState»: переопределение типа «struct»).

Какой самый лучший способчтобы решить эту проблему?

Я думал о:

  • Переименование, но я нарушу соглашение об именах (и это действительно "состояние" игроков)
  • Поместив его в пространство имен, но тогда я должен поместить каждый класс в пространство имен, что означает много работы

Есть ли какой-либо другой способ (возможно, особый вариант MSVC 2010), скажем, исключить этот файл иликакое-то «неопределенное» это перечисление или что-то еще?

[править] и ответ: громко и ясно, ИМЕНА!+1 и спасибо всем!

Ответы [ 4 ]

7 голосов
/ 03 декабря 2011

Пространство имен, вот для чего оно все-таки. Группировка и избежание конфликтов имен. Это не повредит, если вы пройдете свою базу кода и поместите все в пространство имен. Это то, что ты должен был делать все это время.

3 голосов
/ 03 декабря 2011

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

Ну, в принципе, сложно.Классы должны быть в пространствах имен в любом случае .Если вы не поместили их в пространство имен, это не является устойчивым, это просто срезает углы, и вот почему.

2 голосов
/ 03 декабря 2011

Я бы поместил это в пространство имен.

Нет, это не значит, что вам нужно поместить все классы в пространство имен. Просто скажи

using myns::PlayerState; 

в соответствующее время, или если конфликт все еще возникнет в то время,

typedef myns::PlayerState myPlayerState;

Если вы действительно хотите пойти быстро и грязно, сделайте

#define PlayerState MyPlayerState

после , включая <windows.h>

2 голосов
/ 03 декабря 2011

Очевидный ответ: используйте настраиваемое пространство имен для всех ваших проектов. У него должно быть уникальное имя, и если вам нравится еще больше глубин пространств имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...