2013-08-14 6 views
0

Im пытается сравнить 2 значения в C++ (который им новое так, пожалуйста, полегче)Сравнение символов в C++ - аргумент типа «символ» несовместим с параметром типа «Const символ *

struct styles{ 
int itemNo; 
char desc[26]; 
char brand[21]; //between 3 - 20 
char category; 
double cost; 
}; 

структура объявлено выше, то им с помощью этого кода в другой функции

char cat[2]; 
for (x=0;x<size;x++) 
{ 

    if (strcmp(cat,styleAr[x].category)==0) 

его дает мне ошибку с «styleAr [х] .category» в, если заявление: аргумента типа «полукокс» несовместимо с параметром типа "const char *

каких-либо объяснений о том, как я мог бы решить эту проблему было бы здорово

+1

Go намного легче на себя и использовать 'зЬй :: string'. – chris

+0

размер объявлен как size = createArray (hd1, styleAr); и я передаю это через вызов функции. –

+0

@chris: еще лучше, используйте символ 'char' для представления одного символа (что и выглядит' 'cat', как будто оно хочет быть). –

ответ

3

Если предположить, что cat является строка (то есть, один символ следует '\0'), то вы должны сделать это:

if (cat[0] == styleAr[x].category) 

но, конечно, если вы используете std::string cat и std::string category, вы можете просто написать:

if (cat == styleAr[x].category) 
+0

это сработало отлично ... оцените его! –

3

Вы есть category как единый char и cat является массивом символов (т.е. char *) ... вы, вероятно, не имел в виду, чтобы сравнить строку с одного символа

2

strcmp сравнивает массивы символов, но категория так же, как ingle char, следовательно, ошибка. Вы можете сравнить два символа непосредственно с помощью == Если категория должна быть один символ, вам необходимо изменить кода сравнения

char cat='?';//or whatever you are looking for 

for (x=0;x<size;x++) 
{ 
    if (cat == styleAr[x].category) 
1

Вы сравниваете массив два-Char (cat), который НЕ initalized на любое значение (по крайней мере, не в коде, который вы нам показали), на один символ.

Функция принимает два аргумента типа const char*, то есть две строки c-стиля с нулевым завершением (массив символов, последний элемент которого является символом «\ 0», нулевой символ).

Если вы хотите сравнить только один символ, используйте следующий код:

char cat = ; // Put the character you want to compare styleAr[x].category against there. 

for (int x = 0 ; x < size; x++) 
{ 
    if (cat == styleAr[x].category) 
    { 
     // The two characters are equal. 
    } 
}