リンク内容
前回の問題に類似します。
C++
1template <class Param> 2class func{ 3protected: 4 Param _max; 5 Param* _set; 6 Param _num 7.... 8} 9 10template <class Param> 11class func2 : public func<Param> { // 継承 12public: 13 void test(); 14... 15} 16 17template<class Param> 18void func2<Param>::test(class func<Param> *s1, class func<Param> *s2){ 19 int n = (s1->_max < s2->_num) ? s1->_max : s2->_num; 20 21 for(auto i = 0; i < n; i++) 22 s1->_set[i] = s2->_set[i]; 23 s1->_num = n; 24}
このコードはエラーです。
クラスを関数のパラメータにしています。
s1->_max, s2->_num などの部分ですね。
protected継承を行っているのですが、テンプレートなので、thisを付けなくていけないのですが・・・
リンク内容
今回のような場合、どこにthisを付ければ良いのでしょうか??
this->s1->_max // error!
s1->this->_max // error!
[ error: ‘int func<int>::_max’ is protected within this context ]
[ declared protected here Param _max; ]
privateやprotectedではなく、publicにすれば解決するんですが・・・
アクセス制限の方でちょっとpublicにするのは・・・って感じです。
friendでもできるのですが、継承してprotectedにしても可能なのではないかと思いまして・・・
しかし、テンプレートにするとできません。
protectedの問題を解決できません。
このようなメンバにはどのようにしてアクセスすれば良いのでしょうか??
教えてください。
[追記]
thisを付けると継承したクラス内のメンバ変数にアクセスすることになり、パラメータの方ではない・・・のですね。
すると・・・継承によって他のオブジェクトのアクセス権を獲得するのは無理・・・ということですかね。
friendに頼らないと不可能・・・ぽいかなぁ
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/10 14:06 編集
2018/01/11 05:33