2014-12-21 80 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

相關問題