2014-04-09 36 views
1

所以我想要做的是寫一個類作爲其數據成員的模板類。這是我功課的一部分。如何使模板類成爲另一個類的數據成員?

到目前爲止,這是我:

letter_frequencies.h

#include "ltr_freq_pair.h" 
#include "darray.h" 

class letter_frequencies 
{ 
    private: 
     darray<letterFrequencyStruct> array; 
    public: 
     letter_frequencies(); 
     void outputFrequencies(); 
}; 

letter_frequencies.cpp

#include <iostream> 
#include "letter_frequencies.h" 

letter_frequencies::letter_frequencies() 
{} 

void letter_frequencies::outputFrequencies() 
{ 
    for(int index = 0; index < 26; index ++) 
    { 
     std::cout << "\n" << array[index].letter; 
     std::cout << " " << array[index].frequency; 
    } 
} 

一切編譯,但是一旦我運行它,它有這樣的錯誤:

a.out: darray.cpp:44: T& darray<T>::operator[](unsigned int) [with T = letterFrequencyStruct]: Assertion 'index < used' failed. Abort (core dumped)

的代碼片段,我嘗試使用這個類是:

//Check if Class Works 
    letter_frequencies array; 

    array.outputFrequencies(); 

眼下,darray工作得很好,程序不正是我需要做的,但其中一個要求是有一個名爲letter_frequency的類與數據成員darray<structTypename> name,這就是爲什麼我在這個第一個地方忙碌。

此外,我將如何使課堂呼籲darray明確的構造函數?我想大小設置爲26

darray.h

#ifndef DARRAY_H 
#define DARRAY_H 

#include <iostream> 

template <typename T> 
class darray 
{ 

    public: 
     //Constructors 
     darray(); 
     darray(const darray&); 
     explicit darray(unsigned); 

     //Destructor 
     ~darray(); 

     //Constant Members 
     unsigned size() const {return used;} 
     unsigned capacity() const {return cap;} 

     //Modification Members 
     T& operator [] (unsigned); 
     void pop_back(); 
     void push_back(const T&); 
     const T* find(const T&) const; 
     void resize(unsigned); 

     //Operators 
     T& operator = (const darray&); 
     bool operator == (const darray&) const; 

     //Friends 
     template <typename X> 
     friend std::ostream& operator << (std::ostream& output, const darray<X>& array); 

    private: 
     T* arr; 
     unsigned used, cap; 

}; 

template <typename X> 
std::ostream& operator << (std::ostream& output, const darray<X>& array) 
{ 
    for(int index = 0; index < array.size; index++) 
    { 
     output << index << array[index]; 
    } 

    return output; 
} 

#include "darray.cpp" 

#endif 
+0

我斗膽說'darray'未初始化/相應調整。你的'letter_frequencies'類的構造函數是空的,你很快就會訪問'darray'。也許如果你發佈了'darray.h'源文件? – Massa

+0

@Massa對不起,剛添加它。 – user3062299

回答

0

正如我前面提到的,你必須讓letter_frequencies構造是這樣的:

letter_frequencies::letter_frequencies() : array(26) { 
} 

(所以你初始化具有必要數量的元素的數組)。

:我不認爲你應該讓自己的本土arraystd::vector會更好......

+1

太棒了!非常感謝!是的,我會使用vector,但不幸的是我的教授認爲我們需要在內部和外部學習數據結構,然後才能使用'cstdlib'中的數據結構。 – user3062299

相關問題