1

問題は、継承されたテンプレート クラスから基本コンストラクターを呼び出す方法です。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)

誰かが「使用」または昔ながらの方法でこれを行う方法を知っていれば、私は両方に満足しています. 前もって感謝します

4

1 に答える 1