2013-10-25 2 views
0
struct dic 
{ 
    string key; 
    int code; 
}; 
dic H[71]; 

Теперь, используя key в состоянии while -statement дает мне ошибку.не подходит для «оператора! =» При проверке во время цикла

while ((H[h].key)!= NULL) 
{ 

} 

Ошибка я получаю:

error: no match for 'operator!=' in 'H[h].dic::key != 0' 
+0

Объект не может быть 'NULL' в C++. –

+0

Поскольку C++ «string» не является указателем, вы не можете сравнить его с NULL. Он может быть пустым (нулевая длина), но не NULL. –

ответ

1

тип dic::key является string, и вы пытаетесь сравнить его с целым числом (NULL == 0), который не реализован. Вам нужно проверить, нет ли строки:

while (!H[h].key.empty()) { 
    ... 
} 
0

Ключом элемента является строка. Вы не можете сравнить строку с NULL, так как это объект не указатель. Макрос NULL, скорее всего, либо определяется как указатель, либо значение int, и ни одно из них не сравнимо с строкой.

0

Макрос NULL часто определяется не как 0 или (void *) 0, ни одно из этих значений может быть использовано при сравнении с std::string (если, конечно, вы не реализовать свой собственный оператор пользовательского сравнения, которые вы не должны).

Если вы хотите проверить, является ли строка пустой, используйте std::string::empty.

0

Может быть, вы хотели сказать:

if (H[h].key.empty()) { ... } 
+0

Возможно ** в то время как ** (**! ** H [h] .key.empty()) ... –

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