调用基本默认构造函数模板类

时间:2014-01-16 12:13:26

标签: c++ templates queue default-constructor constructor-chaining

问题是如何从继承的模板类调用基础构造函数。我想创建一个FixedQueue并在std :: queue中重载一些函数。因此std:queue是基类。关键字using,因为c ++ 11,可用于调用基类,如果这是一个专门的类,它可以工作,但我无法使用模板类。

此外,我尝试使用旧的c ++标准,其中我只是调用std :: queue中定义的构造函数。但它不起作用。

h file

#ifndef _HEADER_FIXED_QUEUE_
#define _HEADER_FIXED_QUEUE_

#include <queue>
#include <iostream>

template<class T> 
class FixedQueue : public std::queue<T>
{
  //using queue<T>::queue<T>;

  public:
    FixedQueue();
    FixedQueue(const T &initial_var);
    void foo() { std::cout << "inside\n"; }

};

#endif

cpp文件

#include "FixedQueue.h"

template<typename T>
FixedQueue<T>::FixedQueue()
:
  std::queue<T>()
{ 
  std::cout << "Default Constructor FixedQueue\n";
}

template<typename T>
FixedQueue<T>::FixedQueue(const T &initial_var)
:
  std::queue<T>(initial_var)
{ 
  std::cout << "Specialized Constructor FixedQueue\n";
}

主档。

#include <iostream>
#include "FixedQueue.h"

int main()
{
  FixedQueue<int> d_frameSlices;


  std::cout << "I want to do something with my queue\n";
}

问题是这样的。如何将构造函数链接到基类std :: queue中的已定义构造函数。模板的事情正在扼杀我。

这是我从clang获得的错误消息,这是通常未定义的引用。

Undefined symbols for architecture x86_64:
  "FixedQueue<int>::FixedQueue()", referenced from:
      _main in main-lqoFSA.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果有人知道如何用“使用”或旧时尚方式做到这一点,我对两者都很满意。提前致谢

1 个答案:

答案 0 :(得分:3)

你不应该把模板放在cpp文件中把它全部放在头文件