我从以下程序中收到以下错误:
使用未声明的标识符'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);
}
答案 0 :(得分:2)
C ++标准规定,在解析模板函数时,而不是在实例化时,所有不依赖于模板参数的名称都会被绑定,否则当可以检测到对继承的value
的引用时。
快速解决方法是使用this->value
;因为this
依赖于模板参数,所以在实例化函数时它会被绑定,因此允许引用继承的value
。
答案 1 :(得分:0)
这里有很多问题:
1)F2
未模板化,因此您在T
中使用F2
的任何地方都不正确
2)F1
(基类)在F2
之后定义,将F2
移至F1
以下
3)一个基类正在为它的派生类提供信息。它不应该知道它的派生类。
这是您的实际代码吗?如果错误是您写的实际错误?出于各种原因,我预计会有很多错误。