0

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

此论坛主题 IDataObject : ambiguous symbol error回答了我多次看到的问题。

帖子 #4 声明“将所有 '使用命名空间 XXXX' 从 .h 移动到 .cpp”

这看起来是个好主意,但现在在我的头文件中,我需要引用 .NET Framework 中的参数,例如

void loadConfigurations(String^ pPathname);

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

4

4 回答 4

2

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

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

void loadConfigurations(SomeNamespace::String^ pPathname);

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

于 2008-09-29T19:24:02.450 回答
0

我对 .NET 了解不多,所以我的回答仅适用于您问题的非托管 c++ 部分。就个人而言,这是我避免像瘟疫一样“使用命名空间 XXXX;”的主要原因之一。陈述。

我更喜欢明确地使用诸如“std::cout << “hello world” << std::endl; 之类的命名空间

这避免了命名空间冲突,并且对于某些东西的来源永远不会有任何歧义。此外,当您执行“使用命名空间标准;”之类的操作时 你有点撤销命名空间给你的东西。它们旨在避免碰撞,并且通过将所有内容导入全局,您只需将碰撞重新引入。

这完全是一个意见和品味的问题。

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

于 2008-09-29T19:21:54.827 回答
0

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

namespace TestClassNS
{
  class TestClass;
}

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

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

于 2008-09-29T19:23:14.073 回答
0

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

至少您可以放心,如果您正在创建托管类,那么与非托管类的头文件问题不同,包含问题将在程序集障碍上得到缓解。

于 2008-09-30T03:23:32.203 回答