質問
私は、二重に文字列を変換しようとしています。コードは非常に簡単です。
double first, second;
first=atof(str_quan.c_str());
second=atof(extra[i+1].c_str());
cout<<first<<" "<<second<<endl;
quantity=first/second;
余分に変換しようとする場合、コンパイラは私に知恵のこの宝石をスローします:
エラー:メンバーc_strでのリクエスト extra.std ::のbasic_string <_CharT、 _CharT =チャー、_Traits = STD :: char_traits、_Alloc =有する_Traits、_Alloc> ::演算子[] [ std ::アロケータ](((符号なし int型)非クラスである(I + 1)))、 char型
私はそれが何を意味するのか見当がつかない。私は文字列として余分のままにした場合、私は[I + 1]余分をCOUT場合、私は3を取得プログラム51(3 ASCII)によって最初(2)DIVしよう。一体何が起こっているの?
解決
extra
がstd::string
あるように聞こえるので、extra[i+1]
は非クラス型であるchar
を返します。
extra
th位置から始まる文字列i+1
を解析しようとしているように、これが鳴ります。あなたはこの使用を行うことができます:
second = atof(extra.substr(i + 1).c_str());
他のヒント
のエラーメッセージに基づいて、extra
は型std::string
です。あなたがextra[i+1]
を行うと、結果はタイプchar
のものであり、文字列extra
at位置i+1
の文字が含まれています。
おそらくないあなたが意図したもの。
次のようにの修正として、新しい文字列でextra[i+1]
を置き換えます:
extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());
この変換を処理するためのより良い方法は、(誤りが少ない傾向がある)stringstreamsを使用することである。
stringstream ss(str_quan);
double first;
ss >> first;
あなたは言っていないが、私は「余分な」と思うタイプのstd ::文字列です。だから、式 '3' であるように思われ、 "エクストラ "の" I + 1「余分には、[I + 1]の文字である"。
あなたが実際にやろうとしているか?
あなただけI + 1「余分な」の最後までの文字をしたい(そしてあなたは余分があるどのくらい知っている)、あなたのような何かをしたい場合:
second = atof(extra.c_str() + i + 1);
多くの場合、コンパイルの例を提供するために、reallyt usfullです。
私の推測(と私重点は、十分な型情報や行番号がないbecuase推測)。
second=atof(extra[i+1].c_str());
// Guess
// extra is std::string.
このように余分[X]
)(方法c_strを持たない文字を返します