2014-12-21 5 views
1

В следующем кодеошибка: неправильное преобразование из «полукокса» до «сопзИте полукокс *

#include <stdlib.h> //atoi 
#include <string> 

using namespace std; 

namespace roman 
{ 
    string convert(int input) 
    { 
     string inputStr = to_string(input); 
     if(inputStr.size()==4) 
     { 
      return string(atoi(inputStr[0]), 'M')+convert(stoi(inputStr.substr(1, npos)));//error here 
     } 
    } 
} 

Я получаю титульную ошибку в return линии. Я думаю, что у него есть что-то с функцией atoi. В качестве входного значения требуется значение const char*. Мне нужно знать, как превратить первый символ в inputStr в const char*. Я попытался добавить .c_str() в конец inputStr[0], но это дало мне ошибку request for member c_str which is of non-class type char. У кого-нибудь есть идеи?

+0

Сообщение об ошибке довольно ясно. Получите [хорошую книгу на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) на C++ и _read_ it. –

ответ

3

inputStr[0] - символ (первый знак inputStr); atoi хочет, чтобы указатель на последовательность символов с нулевым завершением.

Необходимо inputStr.c_str().

EDIT: Если вы действительно хотите только первый символ, а не всю строку, то inputStr.substr(0, 1).c_str() выполнит эту работу.

+0

Это избаловало его, спасибо! –

+1

Вместо 'substr', только' inputStr [0] - '0'' преобразует одну цифру в свое числовое значение. –

0

Вы индексировать

inputStr[0] 

получить на один символ. Это не строка, и atoi() не может ее переварить.

Попробуйте построить строку одного символа и вызовите atoi() с этим.

Что-то подобное,

atoi(string(1, inputStr[0])); 

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

Но, это поможет вам.

+0

Похоже, что вы хотите сделать atoi() на всей строке. Если это так, предыдущий ответ должен работать нормально. – KalyanS

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