【发布时间】:2014-05-23 04:47:45
【问题描述】:
所以我要做的是编写一个以模板类作为其数据成员的类。这是我作业的一部分。
到目前为止,这是我所拥有的:
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)
我尝试用于此类的代码 sn-p 是:
//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
【问题讨论】:
-
我敢说
darray没有相应地初始化/调整大小。您的letter_frequencies类的构造函数是空的,不久之后您将访问darray。也许如果你发布darray.h来源? -
@Massa 对,抱歉,刚刚添加。
标签: c++ class templates g++ member