2014-12-21 68 views
1

在下面的代码错误:从“字符”无效的转换为“为const char *

#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++上获取[关于C++的好书](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list),并阅读它。 –

回答

3

inputStr[0]是char(inputStr的第一个字符); atoi想要一个指向以空字符结尾的字符序列的指针。

您需要inputStr.c_str()

编辑:如果你真的想只是第一个字符,而不是整个字符串,然后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

相关问题