0

クラス階層を作成するために、静的ポリモーフィズム (CRTP メソッド) を使用しています。アイデアは、ベース 1 の派生クラスで定義された構造体を使用することです。ただし、VC10 は次のエラーを生成します。

error C2039: 'param_t' : is not a member of 'D'

Intel C++ は次のエラーを生成します。

error : incomplete type is not allowed

それDerived::param_tstruct型であり、正常にコンパイルされるのは非常に紛らわしいです。コードの問題を指摘してください。ありがとう。

// Base class
template<typename Derived>
struct Base {
  typedef typename Derived::param_t param_t; //error c2039

  void setParam(param_t& param);
  const param_t& getParam() const;
  ...

};

// Derived class
class D: public Base<D> {
public:
  struct param_t {
    double a, b, c;
  };

  D(param_t& param):param_(param) {}
  ...

protected:
  param_t param_;   

};

int main()
{
  D::param_t p = {1.0, 0.2, 0.0};
  D *pD = new D(p);
}
4

1 に答える 1