Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用friend访问模板化类中的私有变量_C++_Templates - Fatal编程技术网

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

C++ 使用friend访问模板化类中的私有变量,c++,templates,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>

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

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

为什么??还有,如何使用好友类修复它

提前谢谢

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);
}
模板
F2类:公共F1
{
公众:
F2(to):F1(o){}
虚无乐趣(){

STD::CUT< P> C++标准规定,当分析模板函数时,不依赖模板参数的所有名称都被绑定,而不是在实例化时,否则可以检测到对继承的<代码>值< /代码>的引用。
快速解决方法是使用
this->value
;因为
this
依赖于模板参数,因此在实例化函数时它被绑定,因此允许引用继承的
value

这里有多个问题:

1)
F2
没有模板化,因此在
F2
中使用
t
的任何地方都是不正确的

2)
F1
(基类)在
F2
之后定义,将
F2
移动到
F1

3) 基类与它的派生类是友好的。它不应该知道它的派生类


这是您的实际代码吗?如果是您编写的错误,则是您的实际错误吗?我认为会有很多错误,原因有很多。

这是您的实际代码吗?
F2
源于
F1
,它在您的代码示例中位于它之后。是的,否则它会抱怨朋友不是一个精心设计的类型。@NiallC:可能有一个错误上面的转发声明。只有在模板使用后才有主体,只要主体在模板实例化时可用(在
main()
内命名类型
F2
)我没有注意到,但是我错过了第一行,那就是模板。我注意到了一些例子,我认为“this”有多余的用法。我现在知道它们为什么会出现。谢谢。