C++ 类模板链接器错误

C++ 类模板链接器错误,c++,C++,我一直在尝试创建一个笛卡尔类,它的对象是笛卡尔点int或double上的2个点。然后我想重载您需要将实现放在头文件或头文件包含的文件中。编译器需要访问代码才能在main中构建所需的笛卡尔专门化 例如,这里我们将构造函数的实现放在类声明中: template <class first, class second> class cartesian { public: cartesian(first, second) :x(a), y(b) {} }; 它不必进入类声明本身,但

我一直在尝试创建一个笛卡尔类,它的对象是笛卡尔点int或double上的2个点。然后我想重载您需要将实现放在头文件或头文件包含的文件中。编译器需要访问代码才能在main中构建所需的笛卡尔专门化

例如,这里我们将构造函数的实现放在类声明中:

template <class first, class second>
class cartesian
{

public:
    cartesian(first, second) :x(a), y(b) {}
};

它不必进入类声明本身,但代码必须可以从头文件访问。

您需要将实现放在头文件或头文件包含的文件中。编译器需要访问代码才能在main中构建所需的笛卡尔专门化

例如,这里我们将构造函数的实现放在类声明中:

template <class first, class second>
class cartesian
{

public:
    cartesian(first, second) :x(a), y(b) {}
};

不必进入类声明本身,但是代码必须从头文件访问。

问题的可能副本是C++中使用大型模板项目是可怕的。试着把CARTEIAN.CPP放在主要的地方。问题的可能副本是在C++中使用大型模板项目是很糟糕的。尝试在main中包含cartesian.cpp。将实现放在头文件中是什么意思?什么实施?很抱歉,我没有回答。@EEstud我指的是函数的定义,即.cpp文件中当前包含的内容。因此,我还需要在头文件中构造函数?通常我们在cpp中这样做,但是因为它是一个模板,我需要在头文件中构造它?我理解得好吗?@EEstud更正,并删除.cpp,一些构建系统可能会尝试自动编译它。将实现放在头文件中是什么意思?什么实施?很抱歉,我没有回答。@EEstud我指的是函数的定义,即.cpp文件中当前包含的内容。因此,我还需要在头文件中构造函数?通常我们在cpp中这样做,但是因为它是一个模板,我需要在头文件中构造它?我理解得好吗?@EEstud正确,如果删除.cpp,某些构建系统可能会尝试自动编译它。
#include "cartesian.h"
#include <iostream>

using namespace std;


template<class first,class second>

cartesian<first, second>::cartesian(first a, second b)
:x(a), y(b)
{}

/*
// between obj1 and obj2
template<class first,class second>
double cartesian<first, second>::getslope(cartesian &obj1, cartesian &obj2){

    return ((obj2.y-obj1.y)/(obj2.x-obj1.y));
}

*/


template<class first,class second>

ostream&  operator<< (ostream &out,const cartesian<first, second> &cPoint)
{
    // Since operator<< is a friend of the Point class, we can access
    // Point's members directly.
    out << "(" << cPoint.x << ", " <<
    cPoint.y << ")";

    return out;
}
#include <iostream>
#include "cartesian.h"

using namespace std;

int main()
{

    cartesian<double, int> ob11(3.4, 6);
    return 0;
}
template <class first, class second>
class cartesian
{

public:
    cartesian(first, second) :x(a), y(b) {}
};