【发布时间】:2014-02-05 08:12:41
【问题描述】:
问题是如何从继承的模板类中调用基本构造函数。我想创建一个 FixedQueue 并在 std::queue 中重载一些函数。因此 std:queue 是基类。从 c++11 开始,关键字 using 可用于调用基类,如果这是一个专门的类,它可以工作,但我不能让它与模板类一起使用。
此外,我尝试使用旧的 c++ 标准,在该标准中我只需调用 std::queue 中定义的构造函数。但是它不起作用。
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
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)
如果有人知道如何使用“使用”或旧时尚方式来做到这一点,我对两者都很满意。提前致谢
【问题讨论】:
-
你用的是clang还是clang++?
-
类模板*(区别有助于概念化模板是什么以及它们如何工作)
-
我不明白这与
using有什么关系。您将函数定义放在错误的位置。相当标准的模板错误? -
我需要告诉编译器 T 是类中的模板类型。否则我会得到类似“未知类型名称'T'”的错误
标签: c++ templates queue default-constructor constructor-chaining