如何使模板类成为另一个类的数据成员
How to make a template class a data member of another class?
所以我要做的是编写一个以模板类为数据成员的类。这是我家庭作业的一部分。
到目前为止,这就是我所拥有的:
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.pp
#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
正如我之前提到的,您必须使letter_frequencies
构造函数如下所示:
letter_frequencies::letter_frequencies() : array(26) {
}
(因此,您可以使用必要数量的元素初始化数组)。
但是:我认为你不应该自己制作array
,而std::vector
会更好。。。
相关文章:
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 在C++中,是否可以"overload"作为另一个类成员的对象?
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 通过 C++ 中的另一个结构成员访问结构
- 在构造函数中从另一个类成员构造一个类成员
- 成员模板别名与另一个模板成员
- 如何在STD :: MAP中找到具有至少一个数据成员等于密钥的结构的元素
- C++ Qt4.8 :: 将对象传递给另一个类 - 成员访问不完整类型错误
- 初始化作为另一个 ISO C++成员的结构
- 参考数据会在const函数中更改另一个数据成员
- 使用SWIG包装C 类,该类调用另一个对象成员函数
- 让 pthread 等待另一个数据
- 初始化依赖于另一个类成员的类成员
- 并集:从并集的一个数据成员中读取数据,然后写入另一个
- 我可以初始化一个数据成员,这些成员本身就是头文件中的类
- 我可以使用另一个类成员初始化初始化列表中的对象吗?
- 如何将结构拆分为块,以便将字节保存到 C/C++ 中的另一个数据结构
- 对<MyClass> MyClass 的一个数据成员进行排序向量?
- 基于另一个数据成员的类数据成员类型