Как заказать заголовки в проектах .NET C ++ - PullRequest
0 голосов
/ 29 сентября 2008

Я пытаюсь создать новый проект .NET C ++ с нуля. Я планирую смешать управляемый и неуправляемый код в этом проекте.

эта ветка форума IDataObject: неоднозначная ошибка символа отвечает на проблему, которую я видел несколько раз.

Пост # 4 состояния "Переместить все", используя пространство имен XXXX "из .h в .cpp"

это выглядит хорошей идеей, но теперь в моих заголовочных файлах мне нужно ссылаться на параметры из .NET Framework, такие как

void loadConfigurations(String^ pPathname);

Как я должен двигаться, используя операторы в файле .cpp и использовать соответствующие пространства имен в файле .h?

Ответы [ 4 ]

2 голосов
/ 29 сентября 2008

Это хорошая идея, чтобы всегда использовать полные имена в заголовочных файлах. Поскольку оператор using влияет на весь следующий код независимо от #include, помещение оператора using в файл заголовка влияет на всех, кто может включать этот заголовок.

Таким образом, вы изменили бы объявление вашей функции в заголовочном файле на:

void loadConfigurations(SomeNamespace::String^ pPathname);

где SomeNamespace - это имя пространства имен, которым вы были using ранее.

0 голосов
/ 30 сентября 2008

По моему опыту, единственное пространство имен, с которым вам нужно быть осторожным, - это сама Система. Несколько раздражает, что наиболее распространенный, самый важный - это то, где вы находите проблемы, но это жизнь.

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

0 голосов
/ 29 сентября 2008

Чтобы решить эту проблему, я сделал это в файле .h:

namespace TestClassNS
{
  class TestClass;
}

и затем в файле .cpp я бы #include .h, в котором был TestClass, и использовал там namespaceTestClassNS.

Мой C ++ ржавый, так что может быть лучше.

0 голосов
/ 29 сентября 2008

Я не очень разбираюсь в .NET, поэтому мой ответ относится только к неуправляемой части C ++ вашего вопроса. Лично это одна из главных причин, по которой я избегаю чумы, "использующей пространство имен XXXX;" заявления.

Я предпочитаю просто указывать пространства имен, такие как "std :: cout <<" hello world "<< std :: endl;" </p>

Это позволяет избежать коллизий пространства имен и никогда не возникает двусмысленности относительно того, откуда что-то произошло. Кроме того, когда вы делаете что-то вроде «использование пространства имен std;» вы как бы отменяете то, что дают вам пространства имен. Они были разработаны, чтобы избежать столкновений, и, импортируя все в глобальное пространство, вы просто приглашаете столкновения обратно.

Это строго вопрос мнения и вкуса.

Что касается того, что делать в заголовках, я просто пишу что-то вроде этого: "void f (const std :: string & s);"

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