FAQ

QA・C/QA・C++

QA・C++ 特有のFAQ

ID.

Q. クラス定義の中以外に記述した friend class XXX; という形式の構文は解析できないのでしょうか? QA・C++ の全バージョン

A.


ISO C++違反の構文であるため無視して解析されます。理由は次の通りです。

friend修飾子は、friend修飾子付きで宣言された関数やクラスに、 それらを包含するクラスのprivateやprotectedメンバへのアクセス権限 を与えるという役割を持ちます。
別の言い方をすると、friend修飾子は、friend修飾子付きで宣言された 関数やクラスと、それらを包含するクラスを結びつける役割を持って いることになります。
この役割が表す通り、friend修飾子は、クラス定義の中で記述される ことが前提になっています。
このため、次の構文はISO C++違反になります。 friend class CFriend; class CTest { public: void func(CFriend* p); }正しい構文は次の通りになります。 class CTest { friend class CFriend; public: void func(CFriend* p); }QA C++はISO C++に従って前者の構文をエラーとして扱います(該当箇所には254番の警告が出力されます)。
完全に不適切な構文になりますので、恐れ入りますが、ソースコード側を修正して解析できるようにしてください。

<< QA・C++ 特有のFAQに関するFAQ一覧へ戻る