如何在构造函数接受参数时实例化模板类

时间:2014-04-03 22:51:29

标签: c++ templates pointers queue instantiation

我尝试使用以下内容创建类Queue<T>的新对象:

Queue<char[40]> *q = new Queue<char[40]>(100);

然后,我想在另一个类构造函数上使用这个q

Interface<char[40]> i(q);

如果我只是使用它,我会收到错误invalid conversion from ‘Queue<char [40]>*’ to ‘int’,我想这意味着我试图传递q的值,这是指向它的指针而不是实际值。精细。然后我重新定义了Interface<T>构造函数来接收指针而不是值本身,所以签名是

Interface(DataStructure<T>& q);

由于Queue扩展了DataStructure。出于某种原因,现在q的实例化失败了:

undefined reference to `Queue<char [40]>::Queue(int)

但我很确定我已经用INT参数

编写了构造函数方法
template<typename T>
Queue<T>::Queue(int size): DataStructure<T>(size) {
    std::cout << size << std::endl;
}

为什么我得到这个错误呢?玩指针只是弄得一团糟,我无法想办法现在做什么。

1 个答案:

答案 0 :(得分:3)

此代码Queue<T>::Queue(int size)建议您将定义放在源文件中。如果使用模板,则所有代码都必须位于头文件中。 (还有其他方法,但这是最简单的方法)。