プライベートフィールドのテストを有効にするために、私はテストクラスのクラスに友達として名前をつけました。私はクラスの名前が存在のために確認されていないことに気づいた。それは意図によるのか?「友人のクラス」が存在することが確認されないのはなぜですか?
答えて
フレンドクラス宣言使用しています:
はどのようにほとんどない適切な友人パターンをリファクタリングするためには、私はあなたが私のQ &にポストを読むことをお勧めします非修飾ののクラスの名前は実際にはの宣言とそのクラスの精巧な型指定子です。 は、そのクラスを囲む名前空間のメンバとしてを導入しています。それは
class C
{
friend class X; // OK, introduces '::X'
};
事前に宣言するためにそれを必要としない。しかし、あなたが友人のクラス宣言に修飾名を使用している場合、それは通常の修飾名の検索の対象となります。そして、それはあなたのクラス名が「存在の検証」する場合は、
class X {};
class C
{
friend ::X; // OK, refers to '::X'
friend ::Y; // Error, no '::Y' in sight
};
だから、以前に宣言された名前を参照してくださいfriend宣言に修飾名を使用する必要があります。
意図していますか?
だと思います。それは前方宣言に非常に似ています。
通常、friend
クラスには、friendedクラスの完全な宣言が必要ですが、その逆もありません。 @bogdan's commentに述べたように、あなたが
class MyClass {
friend FriendClass;
};
を使用することができます入力する存在(宣言)をチェック強制的に
。サイドノートとして
: How can I remove refactor a «friend» dependency declaration properly?
'friend class X;'の代わりに 'friend X;'と言うことができます。そしてそれは前の宣言を必要とします。多分これがOPを助けるでしょう。 – bogdan
@bogdan興味深い。私はその文法の微妙さを知らなかった。 –
私が標準の権利(** [dcl.type.elab] **)を読んでいるのは、宣言作業が 'class'によって行われ、' friend'が単なる修飾語であるからです。私の頭の中で働いている範囲についての** [class.friend] ** note 11のちょっと後のカップルの警告があります。 – user4581301
友達クラスが存在する必要がある場合を想像してください。コードをどのように構造化しますか?テストのために、あなたのコードでその友人宣言があります。出荷バージョンをビルドするときは、テストコードを出荷しないため、フレンド宣言を削除してすべてを再構築する必要があります。これで、テストしたコードとは異なるコードが出荷されます。
bogdanとAnTからの返信を参照してください。それ以外の場合は、私は友人に固執していません。開発段階では、デバッグ/リリースの解決策もあります。アサルトのように。 – katang
- 1. gitのプリコミットフックがHEADが存在することを確認するのはなぜですか?
- 2. HttpUtilityクラスが認識されないのはなぜですか?
- 3. マウントポイントは存在するがファイルが存在しないか確認する
- 4. なぜこのクラスが存在するときにこのNoClassDefFoundErrorがスローされますか?
- 5. テンプレート内の友人機能がクラス内で定義されていると公開されていないように見えるのはなぜですか?
- 6. 未確認セレクタがクラスに送信されるのはなぜですか?
- 7. TypeScriptのクラスにメソッドが存在することを確認するには
- 8. Ant:jarクラスにクラスが存在するか確認する
- 9. このクラスがスーパータイプと見なされないのはなぜですか?
- 10. VS2015 Update 1のバグ、または悪いC++:なぜ友達クラスが友人の保護されたデストラクタにアクセスできないのですか?
- 11. GCCは、あなたが友人であるときにプライベートネストされたクラスから継承を許可しないのはなぜですか?
- 12. 電子メールが存在するかどうかを確認する、gmailアカウントでしか動作しない、その他の人では機能しない人
- 13. XMLチェックポイントで要素が存在しないことを確認する方法
- 14. 行が存在しないかどうか確認する[MySQL]
- 15. 存在しない場合、エラーなしで項目が存在するか確認してください。
- 16. 私のGameクラスにGraphicsHeightが存在しないのはなぜですか?
- 17. クラスが存在するかどうかを確認する/ jQuery
- 18. チェックする仕事は、私が何もフォルダが存在しない場合、ジョブが存在することを確認することができREST
- 19. jQueryバージョン1.4.2で$が認識されないのはなぜですか?ここ
- 20. SqlDataReaderに列が存在しないか確認する
- 21. ディレクトリが存在しないか確認する
- 22. Python3 Unicode文字が存在しないか確認する
- 23. PhoneGap.execサービスが存在することを確認しますか?
- 24. これはSigillシグナルが途中で存在するのはなぜですか?
- 25. jqGridとSeo - 友人になることはできますか?
- 26. この配列がPHPクラスの配列として認識されないのはなぜですか?
- 27. は、なぜ私はここに友人を機能させるの使用が何であるかを意味++
- 28. テキストがリストに存在しないことを確認する方法
- 29. これは友人関係の適切な使用ですか?
- 30. なぜこのコードはlineno1が存在しないと伝えますか?
*「私はテストクラスをプライベートフィールドのテストを可能にするためにテストするクラスの友人としてテストクラスに名前を付けることに使用しました」* - それはひどい考えです。テストによってカプセル化が中断されてはなりません。 –
宣言*作成*名前。彼らは名前の存在をチェックしません。 –
あなたはあなたが持っているものの例と、それがうまくいかないと思うものの例を見せてもらえますか? – NathanOliver