无法创建对象并使用其模板类的方法

时间:2016-04-28 07:50:32

标签: c++

我在C ++中使用模板几乎是新手。 以下是我尝试使用的代码。我无法使用以下代码,因为我无法弄清楚如何为它创建对象并使用其中定义的方法。

 template <typename UInt> class nCr {
  public:
      typedef UInt result_type;
      typedef UInt first_argument_type;
      typedef UInt second_argument_type;

      result_type operator()(first_argument_type n, second_argument_type k) {
          if (n_ != n) {
              n_ = n;
              B_.resize(n);
          } // if n

          return B_[k];
      } // operator()

  private:
      int n_ = -1;
      std::vector<result_type> B_;

  }; 

我是如何创建对象的:

#include <iostream>
#include "math.hpp" // WHere the above class nCr is defined

int main() {
    int n =4;
    nCr x(4,2);

    return 0;
}

为此,我将错误创建为

error: use of class template 'jaz::Binom' requires template arguments      
        nCr x(4,2);        
             ^
./include/math.hpp:68:34: note: template is declared here      
  template <typename UInt> class nCr {       
  ~~~~~~~~~~~~~~~~~~~~~~~~       ^        

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

第一个错误nCr是一个模板类,您需要在提到时指定模板参数,例如nCr<int>

第二个错误nCr<int> x(4,2);表示通过其构造函数构造一个nCr<int>,它带有两个参数,但nCr没有这样的构造函数。相反,您在operator()中定义了nCr,因此您可能意味着

nCr<int> x;
int result = x(4, 2);

答案 1 :(得分:0)

由于它是模板类,因此请指定参数:

nCr<int> x;

由于没有匹配的构造函数nCr<int> x(4,2) // doesn't work

首先声明x,然后调用您在课程中定义的operator()

nCr<int> x;
int value = x(4,2);