我在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 {
~~~~~~~~~~~~~~~~~~~~~~~~ ^
有什么建议吗?
答案 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);