我从下面的程序中得到以下错误:
使用未声明的标识符“值”
为什么?而且,如何使用友元类修复它?
提前致谢。
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/