Ошибки в std :: count (нет ошибки преобразования) - PullRequest
0 голосов
/ 09 марта 2020

Попытка устранить ошибку, возникающую в результате использования функции std :: count. Я прошел через шаблон в xutility, и кажется, что типы совпадают, поэтому я не уверен, почему я получаю эти ошибки. Я использую функцию подсчета в двух случаях, и они выдают две разные ошибки.

Первая ошибка:

C2446 '==': no conversion from 'const char [2]' to 'int'

Вот код, который создает эту ошибку (это начало компаратора для сортировки):

struct vectorComparator
{
    bool operator ()(const string& string1, const string& string2)
    {
        if (count(string1.begin(), string1.end(), "!") < count(string2.begin(), string2.end(), "!") + 1)
            return string1 < string2;
        return string1 < string2;
    }
};

Вторая ошибка очень похожа:

C2446 '==': no conversion from 'const _Ty' to 'int'

Вот код, который создает эту ошибку:

string myClass::myFunction(string parentToken)
{
    string messageChunk{};
    vector<string> tokens;

    for (auto it = messageMap.begin(); it != messageMap.end(); ++it)
        if (it->first.find(parentToken) != string::npos && 
            count(it->first.begin(), it->first.end(), elementDelimiter) == count(parentToken.begin(), parentToken.end(), elementDelimiter) + 1)
        {
            tokens = explode(elementDelimiter, it->first);
            messageChunk += (messageChunk.size() > 0 ? "," : "") + '\"' + tokens[tokens.size()] + "\":" + buildValueString(it->second);
            messageMap.erase(it);
        }

    messageChunk = '{' + messageChunk + '}';

    if (arrayTokens.find(tokens[tokens.size() - 1]) != string::npos)
        messageChunk += '\"' + tokens[tokens.size() - 1] + "\":[" + messageChunk + ']';
    else messageChunk += '\"' + tokens[tokens.size() - 1] + "\":" + messageChunk;

    return messageChunk;
}

С Понимая, что я новичок в этом, и я уверен, что есть много способов упростить код (и я приму весь ввод), я прежде всего ищу помощь в устранении этих двух ошибок. Кажется, это проблема типа, но я не могу ее решить. Во втором примере elementDelimiter определяется как const char * и равен «!». Спасибо за любую помощь или руководство, которое вы можете предоставить!

1 Ответ

3 голосов
/ 09 марта 2020

Итак: 1 регистр: строка состоит из символа. И "count" пытается сравнить строку ("!") С int-like-char. Не может Ты можешь использовать '!' вместо "!" (одинарные кавычки определяют один символ).

2 case: я думаю, что такая же ошибка (что такое тип messageMap?).

Во втором случае вы можете использовать 'count' с предикатом :

count(it->first.begin(), it->first.end(), [elementDelimiter](char symbol){
  // Here you should define your comparison operation. Like this:
  return elementDelimiter[0] == symbol; })
...