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

C++ 调用基默认构造函数模板类,c++,templates,queue,default-constructor,constructor-chaining,C++,Templates,Queue,Default Constructor,Constructor Chaining,问题是如何从继承的模板类调用基构造函数。我想创建一个FixedQueue并在std::queue中重载一些函数。因此std:queue是基类。从c++11开始,关键字using可以用来调用base,如果这是一个专门的类,它就可以工作,但是我不能让它与模板类一起工作 此外,我尝试使用旧的C++标准,在其中简单地调用STD::队列中定义的构造函数。但是它不起作用 h文件 #ifndef _HEADER_FIXED_QUEUE_ #define _HEADER_FIXED_QUEUE_ #inclu

问题是如何从继承的模板类调用基构造函数。我想创建一个FixedQueue并在std::queue中重载一些函数。因此std:queue是基类。从c++11开始,关键字using可以用来调用base,如果这是一个专门的类,它就可以工作,但是我不能让它与模板类一起工作

此外,我尝试使用旧的C++标准,在其中简单地调用STD::队列中定义的构造函数。但是它不起作用

h文件

#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
\ifndef\u头\u固定\u队列_
#定义\u头\u固定\u队列_
#包括
#包括
模板
类FixedQueue:public std::queue
{
//使用queue::queue;
公众:
FixedQueue();
固定队列(常量T和初始变量);

void foo(){std::cout您不应该将模板放在cpp文件中,将其全部放在头文件中

您使用的是clang还是clang++?类模板*(这种区别有助于概念化模板是什么以及它们是如何工作的)我不明白这与使用
有什么关系。你把函数定义放错了地方。非常标准的模板错误?我需要告诉编译器t是类中的模板类型。否则,我会出现类似“未知类型名称't'这样的错误”这不是问题所在。我在头文件中声明类,并在cpp中实现函数。这些需要模板定义,以便了解所需的类型,如果函数是模板函数,则deff需要它declaration@Montaldo:您没有在听。这是一个问题。请不要实现CPP.Thi中的功能s不是一个类,而是一个类模板。是的,但不可能在cpp文件中实现它们。通常关于模板的所有其他内容我都能做到。你能为我详细说明一下吗?@Montaldo:不,不是。模板的函数定义必须在每个翻译单元中都可见。这不是sta吗TD在你的C++书籍中?更多信息,请参见阿尔夫几分钟前发表在评论中的链接。A:不,我错了。你的权利,为什么这个工作的原因是我曾经把我的CPP文件包含在页眉里。有一个HACK。谢谢你的努力和解释。
#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";
}
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)