0

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

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

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

提前致谢。

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

2 回答 2

2

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

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

于 2012-07-05T23:46:21.117 回答
0

这里有多个问题:

1)F2没有模板化,所以你使用T的任何地方F2都是不正确的

2)F1(基类)定义在 之后F2,移到F2下面F1

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

这是您的实际代码吗?如果是这样,你写的错误是你的实际错误吗?由于一系列原因,我预计会有很多错误。

于 2012-07-05T23:53:38.520 回答