+ -
当前位置:首页 → 问答吧 → "C++泛型"弄不懂

"C++泛型"弄不懂

时间:2011-12-27

来源:互联网

我刚学C++的泛型,看的是C++标准程序库,书中有一个例子,如下:

1 #include <iostream>
2 using namespace std;
3
4 template <class T>
5 class MyClass {
6 public:
7 MyClass(T t = 0) : value(t) {}
8 template <class X>
9 void assign(const MyClass<X>& x) { // allows different template
10 value = x.value;//x.getValue(); // 问题在这...
11 }
12 T getValue() const { // MyClass<T> is assignable
13 return value;
14 }
15 private:
16 T value;
17 };

void f() {
  MyClass<double> d(1.0);
  MyClass<int> i(2);
  d.assign(d);
  cout << d.getValue() << endl;
  d.assign(i);
  cout << d.getValue() << endl;
}

int main() {
  f();
  return 0;
}

问题:
在assign方法中,如何使用:value = x.value;为什么会出现
d:\KuaiPan\Codes\cclib\02>g++ MemTmpt.cc -o MemTmpt
MemTmpt.cc: In member function 'void MyClass<T>::assign(const MyClass<X>&) [with
 X = int, T = double]':
MemTmpt.cc:24:13: instantiated from here
MemTmpt.cc:16:5: error: 'int MyClass<int>::value' is private
MemTmpt.cc:10:5: error: within this context

为什么value是private,会导致出错??《C++标准程序库》说是assign()的参数x和*this的型别不相同,不能直接存取MyClass<>的private成员和protected 成员,但是可以使用getValue()。
通过编译器提示信息,X的参数化发生在13行,为什么在assign调用过程中就推测出x的型别,而是推迟到getValue时候才将X参数化?我想明白C++是如何考虑这个问题???希望各位大牛解释解释...

作者: halonar   发布时间: 2011-12-27

d.assign(i);这句不行

作者: qscool1987   发布时间: 2011-12-27

通过编译器提示信息,X的参数化发生在13行,为什么在assign调用过程中就推测出x的型别,而是推迟到getValue时候才将X参数化?我想明白C++是如何考虑这个问题???希望各位大牛解释解释...


================
不知道你要问什么....

作者: mingliang1212   发布时间: 2011-12-27

晕倒,刚刚的回复竟然没有响应。你这问题大概是访问对象私有成员引起的。MyClass<int>和MyClass<double>是不同的类,你在A类的成员函数里当然是不能访问B类对象的私有成员了。

作者: pengjialaosan   发布时间: 2011-12-27

热门下载

更多