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

这个论坛帖子 IDataObject:模糊符号错误解决了我多次看到的问题。

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

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

void loadConfigurations(String^ pPathname);

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

有帮助吗?

解决方案

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

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

void loadConfigurations(SomeNamespace::String^ pPathname);

其中SomeNamespace是您之前<=>的名称空间的名称。

其他提示

我对.NET知之甚少,所以我的回答仅适用于你问题的非托管c ++部分。就个人而言,这是我避免使用命名空间XXXX; <!>语句。

我更喜欢明确使用名称空间,例如<!> quot; std :: cout <!> lt; <!> lt; <!>“hello world <!> quot; LT <!>; LT <!>;的std :: ENDL; QUOT <!>;

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

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

关于在标题中做什么,我只写这样的东西:<!> quot; void f(const std :: string <!> amp; s); <!> quot;

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

namespace TestClassNS
{
  class TestClass;
}

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top