0

新しい .NET C++ プロジェクトをゼロから構築しようとしています。このプロジェクトでマネージ コードとアンマネージ コードを混在させる予定です。

このフォーラムスレッド IDataObject : ambiguous symbol errorは、私が何度も見た問題に答えます。

投稿 #4 には、「'using namespace XXXX' をすべて .h から .cpp に移動する」と記載されています。

これは良いアイデアのように見えますが、ヘッダー ファイルで .NET Framework のパラメーターを次のように参照する必要があります。

void loadConfigurations(String^ pPathname);

.cpp ファイルで using ステートメントを移動し、.h ファイルで対応する名前空間を使用するにはどうすればよいですか?

4

4 に答える 4

2

ヘッダー ファイルでは常に完全修飾名を使用することをお勧めします。このステートメントは、 にusing関係なく後続のすべてのコードに影響するため、ステートメントをヘッダー ファイルに配置すると、そのヘッダーをインクルードする可能性のあるすべての人に影響します。#includeusing

したがって、ヘッダー ファイルの関数宣言を次のように変更します。

void loadConfigurations(SomeNamespace::String^ pPathname);

ここで、SomeNamespace はusing以前の名前空間の名前です。

于 2008-09-29T19:24:02.450 に答える
0

私の経験では、注意が必要な唯一の名前空間は System 自体です。最も一般的で最も重要な問題が問題を見つける場所であることはやや面倒ですが、それは人生です.

少なくとも、マネージ クラスを作成している場合、アンマネージ クラスのヘッダー ファイルの問題とは異なり、インクルードの問題はアセンブリ バリアで軽減されるので安心できます。

于 2008-09-30T03:23:32.203 に答える
0

私は.NETについてあまり知らないので、私の答えはあなたの質問の管理されていないc ++部分にのみ適用されます。個人的には、これは私が「名前空間 XXXX を使用する」というペストのように避ける主な理由の 1 つです。ステートメント。

"std::cout << "hello world" << std::endl;" のような名前空間で明示することを好みます。

これにより、名前空間の競合が回避され、何かがどこから来たのかについてあいまいさがなくなります。また、「名前空間 std; を使用する」のようなことをすると、名前空間が提供するものを元に戻しています。それらは衝突を避けるように設計されており、すべてをグローバルにインポートすることで、衝突を元に戻すだけです.

これは厳密には意見と好みの問題です。

ヘッダーで何をするかというと、「void f(const std::string &s);」のように書くだけです。

于 2008-09-29T19:21:54.827 に答える
0

これを解決するために、.h ファイルでこれを行いました。

namespace TestClassNS
{
  class TestClass;
}

次に、.cpp ファイルで、TestClass が含まれていた .h を #include し、そこで namespaceTestClassNS を使用します。

私のC++はさびているので、もっと良い方法があるかもしれません。

于 2008-09-29T19:23:14.073 に答える