1

問題是如何從繼承的模板類調用基礎構造函數。我想創建一個FixedQueue並在std :: queue中重載一些函數。因此std:queue是基類。關鍵字using,自C++ 11以來,可以用來調用基礎,如果這是一個專門化的類,它可以工作,但我無法使用模板類來處理它。調用基礎默認構造函數模板類

此外,我試圖使用舊的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) 

如果有人知道如何與「使用」或舊的方式方法,我很高興與這兩個做到這一點。在此先感謝

+0

您使用的鐺鐺或++? –

+0

類模板*(區分有助於概念化模板_are_以及它們如何工作) –

+0

我不明白這與'使用'有什麼關係。你把你的函數定義放在錯誤的地方。漂亮的標準模板錯誤? –

回答

3

你不應該放在CPP文件中的模板,把它全部在頭文件

+0

這不是問題。我在頭文件中聲明類並在cpp中實現函數。這些需要模板定義,以便知道所需的類型,如果函數是模板函數,則deff需要聲明 – Montaldo

+0

@Montaldo:您沒有在聽。這是一個問題。不要在CPP中實現這些功能。這不是_class_,而是_class template_。 –

+0

您的權利,但沒有可能在cpp文件中實現它們。通常與其他所有關於模板的事情我都可以做到。你能詳細解釋一下嗎? – Montaldo

相關問題