如何使模板类成为另一个类的数据成员?

时间:2014-04-09 19:05:34

标签: c++ class templates g++ member

所以我要做的是编写一个带有模板类的类作为其数据成员。这是我作业的一部分。

到目前为止,这就是我所拥有的:

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

1 个答案:

答案 0 :(得分:0)

正如我之前提到的,你必须像这样构建letter_frequencies构造函数:

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

(所以用必要数量的元素初始化数组)。

但是:当array会更好时,我认为你不应该自己成长std::vector ...

相关问题