2014-12-06 167 views
2

我有一个小问题。我一直得到这个错误:错误:对于这部分代码(list<lst>* listSearch(list<lst> *LST, char* wrd, KEY key)),从'char'无效转换为'char *'错误:从'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; 
} 
+1

你最近怎么调用最后一个函数? – 2014-12-06 19:09:39

+2

您在编译器告诉您的行(您甚至没有向我们提到过)上传递'char'来代替'char *'。它为什么会起作用? – chris 2014-12-06 19:09:57

+3

请切换到'std :: string'来避免这类问题。 – 2014-12-06 19:16:01

回答

2

它看起来像一个编译器错误。至少编译器应该发出另一个错误消息。

该问题与操作员优先级有关。这种说法

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。我不认为你的意思是这个逻辑。

+0

“必须写成”?是不是使用'i - > _ code'认为更清楚? – 2014-12-06 19:34:57

+0

@Tim Seguine我展示了使用operator *的正确语法。 – 2014-12-06 19:38:38

+0

我知道。我建议(除了你写的内容之外)推荐一个更清楚的,更习惯于写同一个东西的语法。 – 2014-12-06 19:40:51

相关问题