标题中的模板不让我使用我的课程?

时间:2014-03-09 19:30:02

标签: c++ templates

模板很新,我的教授教他们很糟糕,所以我试着自己学习。看了几个视频,我似乎无法理解我做错了什么。当我取出模板时,我的整个代码会编译,但只要我添加代码

//将所有以前的int替换为T

template <typename T>
class Checks
{
public:
int ispair(vector<T> dvalues);
int flush(Vector<T> dsuits);
int straight(vector<T> dvalues);
int threeofakind(vector<T> dvalues);
int fourofakind(vector<T> dvalues);
int fullhouse(vector<T> dvalues);
Checks(); //didn't include all of header since there's a lot more want to save room
}

当我这样做时,在我有0之前,我得到了一堆错误(58)。当我尝试在另一个.cpp中使用我的Checks类时:

Checks ck1;
Checks ck2; //this would be in another class

我收到此错误:检查没有适当的默认构造函数可用。

显然,我在做模板的方式,建议或帮助方面做错了什么?

2 个答案:

答案 0 :(得分:3)

只是因为我不精通CPP,但是在定义变量时,你需要指定类的类型:

Checks<int> ck1;

答案 1 :(得分:1)

你有3个问题

  • 你忘了在矢量之前添加std ::。
  • 一个向量写的是Vector而不是vector
  • 你没有用}关闭你的班级;

    #include <vector>
    
    template <typename T>
    class Checks {
    public:
        int ispair(std::vector<T> dvalues);
        int flush(std::vector<T> dsuits); //was Vector
        int straight(std::vector<T> dvalues);
        int threeofakind(std::vector<T> dvalues);
        int fourofakind(std::vector<T> dvalues);
        int fullhouse(std::vector<T> dvalues);
    
    }; //didn'T close the class with };
    

** 编辑 **

int main(int argc, char** argv) {
    Checks<int> check;
    std::vector<int> v;
    check.ispair(v);
    return EXIT_SUCCESS;
}

Check.h

#include <vector>

template <typename T>
class Checks {
public:
    int ispair(std::vector<T> dvalues);
};

template<class T>
int Checks<T>::ispair(std::vector<T> dvalues) {
    return 0;
}