問題は、継承されたテンプレート クラスから基本コンストラクターを呼び出す方法です。FixedQueue を作成し、std::queue でいくつかの関数をオーバーロードしたいと考えています。したがって、std:queue が基本クラスです。c++11 以降、キーワード using を使用してベースを呼び出すことができ、これが特殊なクラスの場合は機能しますが、テンプレート クラスでは機能しません。
さらに、std::queue で定義されたコンストラクターを呼び出すだけの古い C++ 標準を使用してみました。しかし、うまくいきません。
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)
誰かが「使用」または昔ながらの方法でこれを行う方法を知っていれば、私は両方に満足しています. 前もって感謝します