2017-01-12 2 views
-1

ошибка: недействительная инициализация неконстантной ссылки типа 'char &' из временного типа 'char'ошибка: недействительная инициализация неконстантной ссылки типа 'char &' из временного типа 'char'

Я видел ошибку выше на большом количестве сообщений, и все же все, что я пытаюсь, не исправляет.

У меня есть следующие функции:

vector<string> splitString(const string& str, const char& ch) 
{ 
    string next; 
    vector<string> result; 

    for (string::const_iterator it = str.begin(); it != str.end(); it++) 
    { 
     if (*it == ch) 
     { 
      if (!next.empty()) 
      { 
       result.push_back(next); 
       next.clear(); 
      } 
     } 
     else 
     { 
      next += *it; 
     } 
    } 

    if (!next.empty()) 
    { 
     result.push_back(next); 
    } 

    return result; 
} 

который принимает строку и символ и расщепляет строку, основанную на характере данного. У меня также есть следующая строка кода для вызова функции:

int main(int argc, char*argv[]) 
{ 
    string value = "OK,OK,OK,FAULT,OK" 
    vector<string> texts = splitString(value, ','); 

    //Do stuff with "texts" here 
} 

EDIT То есть мой код в моей основной функции

Я имею ту же функцию, и тот же способ вызова функции в другой C++, которую я написал, который отлично работает, поэтому я не могу понять, почему он не работает в этом.

Любая помощь была бы принята с благодарностью. Спасибо

+1

Это не C, пожалуйста, не пометить его как таковой –

+0

К сожалению об этом, я подумал Я только что нажал C++ – user3307598

+0

Не могли бы вы сделать это в реальной программе, начинающейся с 'int main()'? То, что вы вставили здесь, выглядит хорошо для меня. – Bathsheba

ответ

0

Вероятно, не самый лучший способ это сделать, но я решил эту ошибку, изменив свою функцию.

Для тех, кто заинтересован, у меня теперь есть:

vector<string> split(std::string string, std::string del) 
{ 
    char* cstr = const_cast<char*>(string.c_str()); 
    char* current; 
    std::vector<std::string> arr; 
    current = strtok(cstr, del.c_str()); 
    while (current != NULL) 
    { 
     arr.push_back(current); 
     current = strtok(NULL, del.c_str()); 
    } 

    return arr; 
} 

Спасибо всем, кто представили свои предложения

+1

Неопределенное поведение, чтобы отбросить' const' на результат 'c_str()', а затем изменить содержимое строки через результирующий указатель. Вместо этого, чтобы работать с строковым контентом, вы должны использовать '& string [0]' после проверки, что строка не пуста. –

-2

Я считаю, что это потому, что вы передаете как строку, так и символ как неконстантные ссылки. Попробуйте изменить содержимое основной для:

const string value = "OK,OK,OK,FAULT,OK"; 
const char comma = ','; 
vector<string> texts = splitString(value, comma); 
+0

Это приводит к следующей ошибке:' недопустимая инициализация ссылки типа 'char &' из выражения типа 'const char '' – user3307598

+0

Hm. Указывает ли компилятор на определенную строку для этой ошибки (и вашей исходной ошибки)? – gasoline

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