C++ 无法使用模板参数 [duplicate] 创建模板构造函数

C++ unable to create template constructor with template parameter [duplicate]

提问人:elections 12 提问时间:1/22/2021 最后编辑:Pat. ANDRIAelections 12 更新时间:1/23/2021 访问量:50

问:


    person<worker> people (w);

我有类和类,我想从类中创建人物对象。personworkerperson

//person.cpp
template <class T>
person<T>::~person()
{
    //dtor
}

//person.h
template <class T>
class person
{
    public:
        person();
        person(T a);
        virtual ~person();

};

我得到

undefined reference to `person<worker>::person(worker).

我做错了什么?

C++ 模板 undefined-reference

评论

0赞 D-RAJ 1/22/2021
你定义过这个吗?person(T a);
0赞 Guillaume Racicot 1/22/2021
与所有未定义的引用错误一样,有一个函数未定义,或者未编译包含该函数的文件。

答:

0赞 Pat. ANDRIA 1/22/2021 #1

未定义接受 a 的构造函数。您只有标题,而没有定义。这会导致错误worker

enter image description here

我在类声明中添加了定义,如下所示:

person(T a) { x = a; };

这是一个编译和执行的最小代码(根据你所做的):

#include <iostream>
class worker
{
 private:
    int a;
  public:
    worker(){}
    ~worker() {}
};

//person.h
template <class T>
class person
{
    public:
        person();
        person(T a) { x = a; };
        virtual ~person();

    private:
        T x;

};

//person.cpp
template <class T>
person<T>::~person()
{
    //dtor
}

int main()
{
    worker w;
    person<worker> people(w);

}