带有模板化父类的派生类

时间:2015-10-26 17:47:06

标签: c++ class c++11 derived-class

我有父类

template <class T_ENUM>
class A
{
public:
  A(int*);
  ~A();
}

现在当我创建派生类时,是否允许在父类上初始化模板?

enum Benum {e1, e2, e3};

class B : public A<Benum >
{
public:
  B(int* a):A(a);
  ~B();
}

我得到以下编译错误

  

对“B :: B(int *)”

的未定义引用

在另一个文件中,其中包含类defenition头文件。

1 个答案:

答案 0 :(得分:3)

  

B(int * a):A(a);

这会产生编译错误。

相反,构造函数应该实现为:

B(int* a) : A(a) {}

编辑:

您可能还想制作单个参数构造函数explicit。例如:

class B
{
public:
    explicit B(int* a);
};

这可以防止从int*B的隐式类型转换。

MCVE代码:

#include <iostream>

enum Benum
{
    e1,
    e2,
    e3
};

template<class T_ENUM>
class A
{
public:
    explicit A(int*)
    {
        std::cout << "A ctor" << std::endl;
    }

    virtual ~A()
    {
    }
};

class B : public A<Benum>
{
public:
    explicit B(int* a) : A(a)
    {
        std::cout << "B ctor" << std::endl;
    }

    ~B()
    {
    }
};

int main()
{
    int x = 3;

    B b(&x);

    return 0;
}

MCVE输出:

A ctor
B ctor

Live Example