关于私有访问权限的有关问题(急)

关于私有访问权限的问题(急)
代码如下:
template<class T>
class MyClass{
 private:
   T value;
 public:
   template<class X>
   void assign(const MyClass<X> & x){
     value=x.getValue();
   }
  T getValue()const{
    return value;
  }
...
};
问题是:为什么assign()的参数x不能直接访问其私有数据成员,要通过getValue()函数来访问呢?
反而以下代码可以直接访问
代码如下:
template <class T>
class MyClass{
private:
T value;
public:
void assign(const MyClass<X>& x){
value=x.value;
}
};
我才刚学C++,突然遇到这个问题了,其实以前复制控制函数一直这样写,我也没有注意,汗,请高手解释一下,不甚感激
------解决方案--------------------
引用:
上面那段代码不可以,编译会出错,提示assign()不能访问私有数据成员



楼主用的是什么编译器啊

我用的VS2005

template<class T>
class MyClass{
private:
T value;
public:
template<class X>
void assign(const MyClass<X> & x){
value=x.getValue();
}
T getValue()const{
return value;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
MyClass<int> a;
MyClass<int> b;
a.assign(b);    //编译通过
}

------解决方案--------------------
x与this不是同一个东东啊,当然不能访问了。
------解决方案--------------------
引用:
嗯,我用的也是VS2005,不过你在主函数中这样定义MyClass,再试试
MyClass<double> d;
MyClass<int> i;
d.assign(d);
d.assign(i);
那么你再那样写就会报错
...

这里的MyClass<int>和MyClass<double> 不是同一种类型了
编译器实际上是生了一个class MyClass_Int{};的类 和一个class MyClass_Double{};的类
这样确实不行
------解决方案--------------------
VC 6.0 没啥子问题




#include <iostream>
using namespace std;
template<class T>
class MyClass{
private:
T value;
public:
MyClass(){}

MyClass(T i):value(i){}

template<class X>
void assign(const MyClass<X>& x){
this->value=x.value;
}

};


int main(){

MyClass<int> a ;
MyClass<int> b ;

a.assign(b);

return 0;
}