如何找到我的C ++类的实际大小?
我正在做一个家庭作业,我需要使用char数组而不是字符串和qsort / bsearch。在下面我对bsearch的调用中,我知道我传递了错误的Entry大小,但我不确定如何获得实际大小,因此我的compareEntries函数找不到正确的对象。
任何人都可以帮助我理解我所缺少的东西吗?
#include <iostream>
using namespace std;
typedef Entry* EntryPtr;
class Dictionary
{
public :
Dictionary( const char *filename );
~Dictionary();
const char *lookupDefinition( const char *word );
private :
int m_numEntries;
EntryPtr *m_entries;
static int compareEntries(const void *leftSide, const void *rightSide);
};
int Dictionary::compareEntries(const void *leftSide, const void *rightSide)
{
EntryPtr lside = (EntryPtr) leftSide;
EntryPtr rside = (EntryPtr) rightSide;
return strcmp(lside->Word, rside->Word);
}
const char *Dictionary::lookupDefinition(const char *word)
{
if (m_numEntries == 0)
return 0;
EntryPtr result = (EntryPtr) bsearch(word, m_entries,
m_numEntries, sizeof(m_entries[0]), Dictionary::compareEntries);
return result->Definition;
}
class Entry
{
public:
Entry(const char *line);
char *Word;
char *Definition;
};
int main()
{
Dictionary dict( "C:\path\file.txt" );
dict.lookupDefinition("chair");
return 0;
}
没有找到相关结果
已邀请:
5 个回复
辅奈
不起作用? 再次改变 - 我认为大小应该是指针的大小....
蕉衫
中使用的比较器功能要求
为
型(或
为
型)。
嫩昧竞莫
需要排序输入,对吧?
对我来说非常好。 编辑:现在我看到了问题。 Dictionary类包含一个指针数组。问题出在compareEntries函数中,你将指针传递给
;你需要将它们转换为
。 编辑2:正如Amit Kumar所指出的,你还需要更改发送给bsearch的关键参数,或者你需要意识到你在compareEntries中收到的指针并没有指向相同的类型,需要两个不同的类型转换。
遣莫捅炭
坍锭嘉韭蓝
,那就是你得到的,除非你确切地知道你在做什么。 为了它的乐趣,拥有一个指针数组需要一个荒谬的间接量来获得结果:
IMO,实现自己的类型安全bsearch所需的时间比完成所有这些并将其测试和调试所花费的时间要少。