上下文的一些代码:
class WordTable
{
public:
WordTable();
~WordTable();
List* GetListByAlphaKey(char key);
void AddListByKey(char key);
bool ListExists(char key);
bool WordExists(string word);
void AddWord(string word);
void IncrementWordOccurances(string word);
void Print();
private:
List *_listArray[33];
int _GetIndexByKey(char key);
};
class TableBuilder
{
public:
TableBuilder();
~TableBuilder();
void AnalyzeStream(fstream &inputStream);
void PrintResults();
private:
void _AnalyzeCursor(string data);
bool _WordIsValid(string data);
WordTable* _WordTable;
};
struct Element {
public:
string Word;
int Occurances;
Element* Next;
};
class List
{
public:
List();
~List();
Element* AddElement(string word);
void DeleteElement(Element* element);
void Print();
void Delete();
Element* First;
bool WordExists(string word);
void IncrementWordOccurances(string word);
private:
void _PrintElementDetails(Element* element);
};
要求
我必须分析文本,构建链表的数组(其中数组包含每个字母的列表;列表包含文本中找到的每个单词),然后打印出结果。
问题 我不能在WordTable.cpp中初始化列表数组。我知道我误解了一些事情,但我没有想法和时间。任何人吗?
P.S。是的,这是一个功课。停止给我关于最佳实践的建议,请......:)
答案 0 :(得分:4)
_listArray
的初始化如下所示:
WordTable::WordTable() {
for (int i=0; i<33; i++)
_listArray[i] = new List();
}
你真的没有说出究竟是什么问题所以我不确定这是否有帮助...
答案 1 :(得分:3)
这是因为你正在创建一个指向列表的指针数组。将其更改为List _listArray [33];或者像这样初始化它:
for ( int i = 0; i < 33; ++i ) {
_listArray[i] = new List();
}
// and to access methods
_listArray[i]->AddElement( "word" );
答案 2 :(得分:3)
看起来您正在通过拥有一个数组来优化您的链接列表,每个字母的第一个字母对应一个。不要那样做。
使用std :: map。字符串是单词,int是你的计数。
编辑:如果你忽略了我的建议......正如已经指出的那样,你的_listArray实际上是一个指针数组,而不是一个对象数组。我想你想要一个对象数组。由于数组是固定长度的,而List有一个默认的构造函数,最简单的方法就是说List _listArray[33];
如果您想要动态分配,可以改为:
List* _listArray;
在构造函数中:
_listArray = new List[33];
在析构函数中:
delete[] _listArray;
答案 3 :(得分:0)
请不要重新发明轮子(再次) 使用std :: list它可以正常工作,更安全,更标准。
第二:你有设计问题:列表中的元素属性是公共的,但你有一个私有方法???。