如何在.NET C ++项目中订购标头

时间:2008-09-29 19:12:56

标签: .net c++ reference header

我正在尝试从头开始构建一个新的.NET C ++项目。我打算在这个项目中混合使用托管代码和非托管代码。

这个论坛帖子 IDataObject : ambiguous symbol error回答了我多次见过的问题。

发布#4状态 “将所有'使用命名空间XXXX'从.h移动到.cpp”

这看起来不错,但现在在我的头文件中,我需要引用.NET Framework中的参数,如

void loadConfigurations(String^ pPathname);

我应该如何使用.cpp文件中的语句移动并使用.h文件中的相应命名空间?

4 个答案:

答案 0 :(得分:2)

始终在头文件中使用完全限定名称是个好主意。由于using语句会影响所有后续代码而不管#include,因此在头文件中放置using语句会影响可能包含该标头的所有人。

因此,您可以将头文件中的函数声明更改为:

void loadConfigurations(SomeNamespace::String^ pPathname);

其中SomeNamespace是您之前using命名空间的名称。

答案 1 :(得分:0)

我对.NET知之甚少,所以我的回答仅适用于你问题的非托管c ++部分。就个人而言,这是我避免瘟疫“使用命名空间XXXX”的主要原因之一。语句。

我更喜欢明确使用名称空间,例如“std :: cout<<”hello world“<< std :: endl;”

这可以避免命名空间冲突,并且从来没有任何含糊不清的东西。此外,当您执行“using namespace std;”之类的操作时你有点撤消命名空间给你的东西。它们旨在避免冲突,并通过将所有内容导入全局,您只需邀请碰撞回来。

这是一个严格意见和品味的问题。

关于在标题中做什么,我只写这样的东西:“void f(const std :: string& s);”

答案 2 :(得分:0)

为了解决这个问题,我在.h文件中完成了这个:

namespace TestClassNS
{
  class TestClass;
}

然后在.cpp文件中我将#include TestClass所在的.h并在那里使用namespaceTestClassNS。

我的C ++生锈了,所以可能有更好的方法。

答案 3 :(得分:0)

根据我的经验,你必须要注意的唯一命名空间是System本身。有点烦人的是,最常见,最重要的是你发现问题的地方,但这就是生活。

至少你可以感到欣慰的是,如果你正在创建托管类,那么包含的问题将在装配障碍中得到缓解,这与非托管类的头文件问题不同。