C++ 从模板派生时出现LNK2019错误

C++ 从模板派生时出现LNK2019错误,c++,C++,我试图实现一个从模板派生的PointArray类。以下是我的PointArray hpp文件的外观: #ifndef POINTARRAY_H #define POINTARRAY_H #include <iostream> #include <sstream> #include <stdio.h> #include "Array.hpp" using namespace Abhishek::CAD; using namespace Abhishek:

我试图实现一个从模板派生的PointArray类。以下是我的PointArray hpp文件的外观:

   #ifndef POINTARRAY_H
#define POINTARRAY_H
#include <iostream>
#include <sstream>
#include <stdio.h>
#include "Array.hpp"

using namespace Abhishek::CAD;
using namespace Abhishek::CONTAINERS;

namespace Abhishek
{
    namespace CONTAINERS
    {
        class PointArray : public Array<Point>
        {
        public:
            PointArray();//Default constrcutor.
            PointArray(int size);//Constructor with size argument.
            PointArray(const PointArray& arr);//Copy constructor.
            ~PointArray();//Destructor.
            double Length() const;//Length function.
        };

    }
}


#endif
\ifndef POINTARRAY\u H
#定义点数组
#包括
#包括
#包括
#包括“Array.hpp”
使用名称空间Abhishek::CAD;
使用名称空间Abhishek::CONTAINERS;
阿披实
{
命名空间容器
{
类PointArray:公共数组
{
公众:
PointArray();//默认构造函数。
PointArray(int size);//带size参数的构造函数。
PointArray(const PointArray&arr);//复制构造函数。
~PointArray();//析构函数。
double Length()const;//长度函数。
};
}
}
#恩迪夫
我的cpp如下所示:

    #include <iostream>
#include <sstream>
#include <stdio.h>
#include "PointArray.hpp"

using namespace Abhishek::CAD;
using namespace Abhishek::CONTAINERS;

namespace Abhishek
{
    namespace CONTAINERS
    {
        //Default constructor.
        PointArray::PointArray(): Array<Point>()
        {
            cout<<"Point arr default cons"<<endl;
        }

        //Constructor with size argument.
        PointArray::PointArray(int size) : Array<Point>(size)
        {

        }

        //Copy constructor.
        PointArray::PointArray(const PointArray& arr) : Array<Point>(arr)
        {

        }

        //destrcutor.
        PointArray::~PointArray()
        {

        }
    }
}
#包括
#包括
#包括
#包括“PointArray.hpp”
使用名称空间Abhishek::CAD;
使用名称空间Abhishek::CONTAINERS;
阿披实
{
命名空间容器
{
//默认构造函数。
PointArray::PointArray():Array()
{
coutPointArray.obj:错误LNK2019:未解析的外部符号“public:\u thiscall Abhishek::CONTAINERS::Array::Array(类Abhishek::CONTAINERS::Array const&)”(?0$Array@VPoint@CAD@Abhishek@@@CONTAINERS@Abhishek@@QAE@ABV012@@Z) 在函数“public:u thiscall Abhishek::CONTAINERS::PointArray::PointArray”中引用(类Abhishek::CONTAINERS::PointArray const&)“(??)??0PointArray@CONTAINERS@阿披实@@QAE@ABV012@@Z)
1> PointArray.obj:错误LNK2019:未解析的外部符号“public:u thiscall Abhishek::CONTAINERS::Array::~Array(void)”(?1$Array@VPoint@CAD@Abhishek@@@CONTAINERS@Abhishek@@QAE@XZ)在函数uu unwindfunclet$?中引用??0PointArray@CONTAINERS@阿披实@@QAE@XZ$0
1> C:\Users\Rambo\Documents\Level 6\Section 4.2b\Exercise 3\Debug\Exercise 3.exe:致命错误LNK1120:4个未解析的外部

我不明白为什么会发生这种情况。我包括了所有相关的头文件和CPP文件。如果有人能提供帮助,我将非常感谢。

您忘记发布最相关的头文件:声明导致错误的类模板的头文件。几乎可以肯定,该头文件声明了
Arra的默认构造函数y
模板:

Array();
但是没有定义它;要么没有定义,要么源文件中有定义

在这两种情况下,您都会得到一个错误,因为模板必须在使用它们的任何翻译单元中定义。这意味着您需要在标题中定义构造函数(以及任何其他成员函数),以便在使用它们的任何位置都包含它们


如果这不是问题,那么请发布标题以便我们进一步调查。

点定义在哪里?让我猜猜:
数组
模板的实现在“Array.cpp”中,而不是在“Array.hpp”中?.嗨,我实际上刚刚算出来。我没有在我的PointArray.hpp中包含Array.cpp文件,因为错误已经消失,我的构造函数也得到了正确调用。感谢您的关注。我实际上刚刚算出来。我没有在我的PointArray.hpp中包含Array.cpp文件,因为一旦我做了,错误已经消失,我的构造函数也被正确调用了TOR被正确调用。感谢您查看。@user2653401:您可能希望重命名
Array.cpp
(或将其与
Array.hpp
)因为它是头文件,而不是源文件。使用误导性的文件扩展名可能会混淆编译器和程序员。
Array();