前提・実現したいこと
テンプレートclass Aのプライベートメンバ関数をテンプレートclass Bから利用したい場合,classAにフレンド宣言をすることで通常は解決できると思います。以下のコードで,enum型を引数にした場合にうまくいきません。対処の方法をご存知の方ご教示いただけますでしょうか。
発生している問題・エラーメッセージ
'funcA' is a private member of 'A<int>'
該当のソースコード
C++
1template<typename T> 2class B{ 3public: 4 enum type{a,b,c}; 5 void funcB(type); 6}; 7template<typename T> 8class A{ 9 friend void B<T>::funcB(B<T>::type ); 10 static void funcA(){}//この関数を利用したい 11}; 12 13template<typename T> 14void B<T>::funcB(type){ 15 A<T>::funcA();///ここで利用したい 16} 17 18int main(){ 19 B<int> b; 20 b.funcB(B<int>::type::a); 21 return 0; 22}
試したこと
funcB()として,宣言して定義して引数をなくするとエラーは出ません。
補足情報(FW/ツールのバージョンなど)
xcode
clang
c++17
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/21 19:18
2020/11/21 20:55
2020/11/21 21:42 編集
2020/11/21 22:00
2020/11/21 22:22 編集
2020/11/21 22:14