質問

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

このフォーラムスレッド IDataObject:あいまいなシンボルエラーは、何度も見た問題に答えます。

投稿#4の状態 <!> quot;「using namespace XXXX」をすべて.hから.cppに移動します<!> quot;

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

void loadConfigurations(String^ pPathname);

.cppファイル内のステートメントを使用して移動し、.hファイル内の対応するネームスペースを使用するにはどうすればよいですか

役に立ちましたか?

解決

ヘッダーファイルでは常に完全修飾名を使用することをお勧めします。 usingステートメントは#includeに関係なく後続のすべてのコードに影響するため、ヘッダーファイルに<=>ステートメントを挿入すると、そのヘッダーを含む可能性のあるすべてのユーザーに影響します。

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

void loadConfigurations(SomeNamespace::String^ pPathname);

SomeNamespaceは、以前に<=>だった名前空間の名前です。

他のヒント

.NETについてあまり知らないので、私の答えは質問のアンマネージc ++部分にのみ適用されます。個人的には、これは疫病<!> quot; using namespace XXXX; <!> quot;のように避ける主な理由の1つです。ステートメント。

<!> quot; std :: cout <!> lt; <!> lt;のような名前空間を明示的に使用したい<!> quot; hello world <!> quot; <!> lt; <!> lt; std :: endl; <!> quot;

これは名前空間の衝突を避け、何かがどこから来たのかという曖昧さは決してありません。また、<!> quot; using namespace std; <!> quot;名前空間から得られるものを取り消すことになります。衝突を回避するように設計されており、グローバルにすべてをインポートすることで、衝突を招き入れるだけです。

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

ヘッダーで何をするかについては、次のように書きます:<!> quot; void f(const std :: string <!> amp; s); <!> quot;

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

namespace TestClassNS
{
  class TestClass;
}

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top