4

atoi() は私にこのエラーを与えています:


error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast

この行から: int pid = atoi( token.at(0) ); トークンはベクトルです

どうすればこれを回避できますか?

4

5 に答える 5

12

token.at(0) は単一の文字を返しますが、atoi() は文字列 (文字へのポインター) を期待しています。単一の文字を文字列に変換するか、単一の数字の文字をそれが表す数値に変換します。通常*これを行うだけです:

int pid = token.at(0) - '0';

* 例外は、文字セットが 0 ~ 9 の数字を順番にエンコードしない場合です。これは非常にまれです。

于 2008-10-11T05:52:55.230 に答える
4

文字列を作成する必要があります。

int pid = atoi(std::string(1, token.at(0)).c_str());

... token が char の std::vector であると仮定し、単一の文字 (および文字列に含まれるその文字の数、この場合は 1 つ) を受け入れる std::string のコンストラクターを使用します。

于 2008-10-11T05:50:13.330 に答える
2
const char tempChar = token.at(0);
int tempVal = atoi(&tempChar);
于 2012-02-20T14:41:46.613 に答える
2

ベクトルの正確なタイプを言っていないので、あなたの例は不完全です。私はそれが std::vector<char> であると仮定します (おそらく、C 文字列からの各文字で埋められます)。

私の解決策は、char *で再度変換することです。これにより、次のコードが得られます。

void doSomething(const std::vector & token)
{
    char c[2] = {token.at(0), 0} ;
    int pid   = std::atoi(c) ;
}

これは C に似たソリューション (つまり、C++ コードでは非常に醜い) ですが、依然として効率的であることに注意してください。

于 2008-10-11T15:43:16.830 に答える
1
stringstream ss;
ss << token.at(0);
int pid = -1;
ss >> pid;

例:

#include <iostream>
#include <sstream>
#include <vector>

int main()
{
  using namespace std;

  vector<char> token(1, '8');

  stringstream ss;
  ss << token.at(0);
  int pid = -1;
  ss >> pid;
  if(!ss) {
    cerr << "error: can't convert to int '" << token.at(0) << "'" << endl; 
  }

  cout << pid << endl;
  return 0;
}
于 2008-10-11T06:21:59.740 に答える