7

Thinking in C++ Volume 1、第 16 章: テンプレートの紹介。コンテキスト:

ただ言うのではなく、次のことに注意してください。

friend iterator; // Make it a friend 

このコードには次のものがあります。

friend class iterator; // Make it a friend

「iterator」という名前は、インクルードされたファイルから既にスコープ内にあるため、これは重要です。

上記のエッケルは実際にはどういう意味ですか? 正しくコンパイルされているようfriend iteratorで、違いはわかりません。誰でも答えを教えてもらえますか? ありがとう

4

1 に答える 1

6

C++03 標準セクション 11.4 に従って:

クラスのフレンド宣言では、詳細型指定子を使用する必要があります。

そのため、仕様に従って、コンパイラは、のフレンド宣言はiterator複雑なクラス名でなければならないことを警告します。そうでない場合、コンパイラはこの特定の側面で標準に準拠していません。

Elaborated Type Specifiersとは?
C++ は、複雑な型指定子を使用して、クラスをクラスとして扱うようにコンパイラに明示的に指示します。MSDN は私よりもはるかにうまく説明できると思います。詳しい説明については、こちらをご覧ください。

于 2011-06-01T03:43:26.463 に答える