Я пытаюсь создать новый проект .NET C++ с нуля. Я планирую смешать управляемый и неуправляемый код в этом проекте.
эта ветка форума IDataObject: ошибка неоднозначного символа отвечает на проблему, которую я видел несколько раз.
Пост # 4 состояния "Переместить все 'с использованием пространства имен XXXX' из .h в .cpp"
это похоже на хорошую идею, но теперь в моих файлах заголовков мне нужно ссылаться на параметры из .NET Framework, например
void loadConfigurations(String^ pPathname);
Как мне переместить операторы using в файле .cpp и использовать соответствующие пространства имен в файле .h?





Я мало что знаю о .NET, поэтому мой ответ относится только к неуправляемой части С ++ вашего вопроса. Лично это одна из основных причин, по которым я избегаю, как чумы, «использование пространства имен XXXX;» заявления.
Я предпочитаю быть явным с пространствами имен вроде "std :: cout <<" hello world "<< std :: endl;"
Это позволяет избежать коллизий в пространстве имен, и никогда не возникает двусмысленности относительно того, откуда что-то взялось. Кроме того, когда вы делаете что-то вроде «using namespace std;» вы как бы отменяете то, что дают вам пространства имен. Они были разработаны, чтобы избежать столкновений, и, импортируя все в глобал, вы просто приглашаете столкновения обратно.
Это строго вопрос мнения и вкуса.
Что касается заголовков, я просто пишу такие вещи: "void f (const std :: string & s);"
Чтобы решить эту проблему, я сделал это в файле .h:
namespace TestClassNS
{
class TestClass;
}
а затем в файле .cpp я бы # включил .h, в котором был TestClass, и сделал бы там using namespaceTestClassNS.
Мой C++ заржавел, так что может быть способ получше.
Рекомендуется всегда использовать полностью определенные имена в файлах заголовков. Поскольку оператор using влияет на весь следующий код, независимо от #include, размещение оператора using в файле заголовка влияет на всех, кто может включить этот заголовок.
Таким образом, вы должны изменить объявление функции в заголовочном файле на:
void loadConfigurations(SomeNamespace::String^ pPathname);
где SomeNamespace - это имя пространства имен, которым вы ранее были using.
По моему опыту, единственное пространство имен, с которым нужно быть осторожным, - это сама система. Несколько раздражает то, что наиболее распространенная, самая важная - это то, где вы находите проблемы, но это жизнь.
По крайней мере, вы можете быть уверены, что если вы создаете управляемые классы, ваши проблемы с включениями будут устранены на барьере сборки, в отличие от проблем с файлами заголовков для неуправляемых классов.