使用friend访问模板化类中的私有变量

时间:2012-07-05 23:33:04

标签: c++ templates

我从以下程序中收到以下错误:

使用未声明的标识符'value'

为什么呢?而且,我如何使用朋友类修复它?

提前致谢。

template <typename T>
class F2 : public F1<T>
{
public:
  F2(T o) : F1<T>(o) {}

  void fun() {
    std::cout << value << std::endl;
  }
};

template <typename T>
class F1
{
public:
    template <typename U>
    friend class F2;

    F1(T o) : value(o) {}

protected:
  T value;
};

int main()
{
    F2<int> f(3);
}

2 个答案:

答案 0 :(得分:2)

C ++标准规定,在解析模板函数时,而不是在实例化时,所有不依赖于模板参数的名称都会被绑定,否则当可以检测到对继承的value的引用时。

快速解决方法是使用this->value;因为this依赖于模板参数,所以在实例化函数时它会被绑定,因此允许引用继承的value

答案 1 :(得分:0)

这里有很多问题:

1)F2未模板化,因此您在T中使用F2的任何地方都不正确

2)F1(基类)在F2之后定义,将F2移至F1以下

3)一个基类正在为它的派生类提供信息。它不应该知道它的派生类。

这是您的实际代码吗?如果错误是您写的实际错误?出于各种原因,我预计会有很多错误。