c++ - 使用 friend 访问模板类中的私有(private)变量

标签 c++ templates

我从下面的程序中得到以下错误:

使用未声明的标识符“值”

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

提前致谢。

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);
}

最佳答案

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

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

关于c++ - 使用 friend 访问模板类中的私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353963/

相关文章:

c++ - 模板代码中的默认类型参数错误

WordPress:带有主题的打包插件

c++ - 位运算,主要是~

使用宏的任意成员变量的c++类生成

c++ - 模板函数的重新声明错误

c++ - 如何为 operator<< 创建 C++ 模板

c++ - 如何在 C++ 中使用迭代器反转列表

C++基类析构函数顺序问题

c++ - 实现智能指针 - 在 vector 中存储模板类

c++ - 图像电平调整算法