2014-10-26 2 views
-4

У меня есть небольшая структура:ошибка C2664: show_info: не может преобразовать параметр 2 из 'полукокса [20]' с «полукоксом

struct price 
{ 
    char name[20]; 
    char shop[20]; 
    int pr; 
    price *next; 
}; 

Функция, которая не работает:

void show_info(price *&head, char cur) 
{ 
    bool found = 0; 
    price *temp = new price; 
    temp->name = cur; 
    for (price *i=head; i!=NULL; i=i->next) 
     if (temp == i) 
     { 
      cout<< i->shop << i->pr; 
      found = 1; 
     } 
     if (!found) 
      cout << "The the good with such name is not found"; 
     delete temp; 
} 

Основной файл:

int main() 
{ 
    price *price_list=NULL; 
    char inf[20]; 
    list_fill(price_list); 
    cout << "Info about goods: "; 
    show_list(price_list); //there is no problem 
    cout <<"Input goods name you want to know about: "; 
    cin >> inf; 
    cout << "The info about good " << inf << show_info(price_list,inf)<<endl; 
    system("pause"); 
    return 0; 
} 

Мне нужно исправить мою функцию, чтобы она могла работать правильно.

Как указано, ошибка c2664.

+2

Это 'show_info()' или 'show_list()'? – NPE

+0

erm ... да его show_info(). виноват. – Grafit

+0

Возможно, стоит заменить 'char [20]' на 'std :: string'. Я вижу, что вы пытаетесь реализовать какой-то поиск; с помощью 'std :: string' вы можете избежать проблем. – anatolyg

ответ

0

Перепишите функцию следующим образом

#include <cstring> 

//... 

void show_info(const price *head, const char *cur) 
{ 
    bool found = false; 
    const price *i = head; 

    for (; i != NULL && !found; i = i->next) 
    { 
     found = strcmp(i->name, cur) == 0; 
    } 

    if (found) 
    { 
     cout<< i->shop << i->pr; 
    } 
    else 
    { 
     cout << "The the good with such name is not found"; 
    } 
} 
+0

мы делаем 'const price * head' и' const char * cur', чтобы заставить 'strcmp' работать? – Grafit

+0

@Grafit Функция будет работать без этих квалификаторов. Они просто означают, что ни один список, ни строка не будут изменены внутри функции. Также вы можете использовать строковые литералы в качестве второго аргумента. –

+0

эта функция выглядит лучше. но проект все еще не работает. @vlad – Grafit

1
void show_list(price *&head, char cur) 

должен быть

void show_list(price *&head, char cur[]) 

, как вы передаете inf ИЭ char [20] в show_info(price_list,inf)

PS: Там может быть другие проблемы

+0

true. теперь есть 2 ошибки. error c2440: =: невозможно преобразовать из 'char []' в 'char [20]' – Grafit

+1

@Grafit Хорошо попробуйте проанализировать эти ошибки, они не будут слишком сложными для этого простого кода, если вы _really_ lost come back на SO с новым сообщением – P0W

+0

uh. В любом случае. – Grafit

Смежные вопросы