c ++'未定义参考'具有多种数据类型的模板类

时间:2017-07-18 06:15:25

标签: c++ class templates types

我有一个模板类,它采用2种数据类型T1和T2,它应该采用多达2种不同的数据类型,然后使用方法display()将它们打印到终端

  

pair.h

#ifndef PAIR_H
#define PAIR_H

template <class T1, class T2>
class Pair
{
public:
    Pair();
    Pair(const T1 & t1, const T2 & t2) : first(t1), second(t2) {}
    ~Pair();

    T1 getFirst() const {return first;}
    T2 getSecond() const {return second;}
    void setFirst(const T1 & t1) {this->first = t1;}
    void setSecond(const T2 & t2) {this->second = t2;}
    void display()
    {
        std::cout << first << " - " << second << endl;
    }


private:
    T1 first;
    T2 second;
};

#endif // PAIR_H

该类在头文件&#34; pair.h&#34;上定义。没有.cpp文件。当我尝试创建Pair类的新Object时,我收到错误:

Undefined reference to 'Pair<string, string>::Pair()'
Undefined reference to 'Pair<int, int>::Pair()'
Undefined reference to 'Pair<string, int>::Pair()'
Undefined reference to 'Pair<string, string>::~Pair()'
Undefined reference to 'Pair<int, int>::~Pair()'
Undefined reference to 'Pair<string, int>::~Pair()'

当我调用类的默认构造函数时,我在main()函数上调用它,如

  

的main.cpp

#include <iostream>
#include <string>
using namespace std;

#include "pair.h"

int main()
{
...
    Pair<string, string> fullName;
    fullName.setFirst(first);
    fullName.setSecond(last);
    fullName.display();
    ...
    Pair<int, int> numbers;
    numbers.setFirst(num1);
    numbers.setSecond(num2);
    numbers.display();
    ...
    Pair<string, int> grade;
    grade.setFirst(name);
    grade.setSecond(score);
    grade.display();
...
}
  

makefile:

a.out : check11b.cpp pair.h
    g++ check11b.cpp

由于这是针对学校的作业,唯一的规则是 makefile main.cpp 文件无法更改。 有什么帮助吗?

1 个答案:

答案 0 :(得分:3)

我有这样的错误消息,所有我需要做的只是更改默认构造函数和析构函数的定义,因为只有一个定义并且没有实际的实现。将默认构造函数更改为此构造函数。

Pair() {}

析构函数相同。