我有一个小问题。我不断收到此错误:错误:对于这部分代码(list<lst>* listSearch(list<lst> *LST, char* wrd, KEY key)
),从'char'到'char *'的转换无效。
我在这里做错了什么?
enum KEY {code, disease} key;
struct lst
{
char *_code;
char *_disease;
lst* next;
};
bool isPartOf(char* word, char* sentence)
{
unsigned int i=0;
unsigned int j=0;
for(i;i < strlen(sentence); i++)
{
if(sentence[i] == word[j])
{
j++;
}
}
if(strlen(word) == j)
return true;
else
return false;
}
list<lst>* listSearch(list<lst> *LST,char* wrd,KEY key)
{
list<lst> resultList;
list<lst>* result;
switch(key)
{
case code:
for(list<lst>::iterator i = LST->begin(); i != LST->end(); i++)
{
if(isPartOf(wrd, *i._code))
{
resultList.push_back(*i);
}
}
break;
case disease:
for(list<lst>::iterator i = LST->begin(); i != LST->end(); i++)
{
if(isPartOf(wrd, *i->_disease))
resultList.push_back(*i);
}
break;
}
result = &resultList;
return result;
}
最佳答案
它看起来像一个编译器错误。至少编译器应发出另一个错误消息。
问题与运算符(operator)的优先级有关。这个说法
if(isPartOf(wrd, *i._code))
必须写成
if(isPartOf(wrd, ( *i )._code))
看来编译器为此语句发出了错误
if(isPartOf(wrd, *i->_disease))
它必须像
if(isPartOf(wrd, i->_disease))
因为表达式
*i->_disease
的类型为char,但是您必须将char *
类型的对象传递给函数使用此函数可能会导致未定义的行为,因为它会返回指向本地对象的指针。
list<lst>* listSearch(list<lst> *LST,char* wrd,KEY key)
{
list<lst> resultList;
list<lst>* result;
//...
result = &resultList;
return result;
}
考虑到函数
isPartOf
在逻辑上是错误的。例如,当word
等于“ab”并且sentence
等于“a1111b”时,该函数将返回true。我认为您的意思不是这种逻辑。