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 に答える