2008-09-29 7 views
0

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

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

Сообщение # 4 состояния «Переместить все„с помощью пространства имен XXXX“из .h в .cpp»

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

void loadConfigurations(String^ pPathname); 

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

ответ

2

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

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

void loadConfigurations(SomeNamespace::String^ pPathname); 

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

0

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

Я предпочитаю просто быть явными с пространствами имен, как «станд :: соиЬ < <„привет мир“< < станд :: ENDL;»

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

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

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

0

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

namespace TestClassNS 
{ 
    class TestClass; 
} 

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

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

0

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

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