Re: вызов шаблонной ф-ии
От: saddva  
Дата: 10.03.06 23:06
Оценка:
Здравствуйте, enots, Вы писали:

E>
E>  template <class T >
E>   class MyClass {
E>     private:
E>       T value;
E>     public:
E>        MyClass(T value_ = T()):value(value_){cout<<"from Constructor value = "<<value<<endl;}
        
E>       template <class X>
E>       void assign(const MyClass<X>& x) { // x must have same type as *this
E>           value = x.value;
E>       }

E>        T getValue()const
E>        {
E>            return value;
E>        }
E>   };

E>int main( int argc, char ** argv )
E>{
E>    MyClass<int> T1, T3;
E>    MyClass<double> T2;


E>    T1.assign(T3); //нет ошибки 
E>    T1.assign(T2); //error C2248: 'MyClass<T>::value' : cannot access private member declared in class 'MyClass<T>'

E>  return 0;
E>}

E>


E>кто нибудь может пояснить почему во втором случае ошибка?


Если интересно, почему так, то просто из MyClass с параметром int и из MyClass с параметром double построенны, естественно 2 отдельных класса. И из метода одного нет доступа к данным другого.
Поэтому или вызывай x.getValue() в assign, или сделай для MyClass друзьями все остальные возможные классы MyClass<T>.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.