我正在尝试从头开始构建一个新的.NET C ++项目。我打算在这个项目中混合使用托管代码和非托管代码。
这个论坛帖子 IDataObject : ambiguous symbol error回答了我多次见过的问题。
发布#4状态 “将所有'使用命名空间XXXX'从.h移动到.cpp”
这看起来不错,但现在在我的头文件中,我需要引用.NET Framework中的参数,如
void loadConfigurations(String^ pPathname);
我应该如何使用.cpp文件中的语句移动并使用.h文件中的相应命名空间?
答案 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本身。有点烦人的是,最常见,最重要的是你发现问题的地方,但这就是生活。
至少你可以感到欣慰的是,如果你正在创建托管类,那么包含的问题将在装配障碍中得到缓解,这与非托管类的头文件问题不同。