1

文字列をdoubleに変換しようとしています。コードは非常に単純です。

            double first, second;
            first=atof(str_quan.c_str());
            second=atof(extra[i+1].c_str());
            cout<<first<<" "<<second<<endl;
            quantity=first/second;

余分に変換しようとすると、コンパイラはこの知恵の宝石を私に投げます:

エラー:extra.std :: basic_string <_CharT、_Traits、_Alloc> :: operator [] [with _CharT = char、_Traits = std :: char_traits、_Alloc = std :: allocator](((unsigned int )(i + 1)))、これは非クラスタイプのcharです

それが何を意味するのかわかりません。extra [i + 1]をcoutすると、3になります。extraを文字列として残すと、プログラムは最初に(2)を51(ascii for 3)で除算しようとします。一体何が起こっているのですか?

4

4 に答える 4

7

extraのように聞こえるstd::stringので、非クラスタイプのをextra[i+1]返します。char

thの位置extraから文字列を解析しようとしているようです。i+1これは、次を使用して実行できます。

second = atof(extra.substr(i + 1).c_str());
于 2009-11-07T23:30:42.240 に答える
1

エラーメッセージに基づいて、extraはタイプstd::stringです。を実行するextra[i+1]と、結果は型charになり、文字列extraの位置に文字が含まれますi+1

おそらくあなたが意図したものではありません。

修正として、extra[i+1]次のように新しい文字列に置き換えます。

extra2 = extra.substr(i+1);
// ...
second=atof(extra2.c_str());

この変換(エラーが発生しにくい)を処理するためのより良い方法は、文字列ストリームを使用することです。

stringstream ss(str_quan);
double first;
ss >> first;
于 2009-11-07T23:32:45.430 に答える
1

まだ言っていませんが、「extra」はstd::string型だと思います。したがって、「extra [i + 1]」という表現は、「extra」の文字「i + 1」であり、「3」のようです。

あなたは実際に何をしようとしていますか?

文字i+1から「extra」の最後までが必要な場合(およびextraの長さがわかっている場合)、次のようなものが必要です。

 second = atof(extra.c_str() + i + 1);
于 2009-11-07T23:33:30.503 に答える
0

助けを求めるとき、コンパイル可能な例を提供することはしばしば本当に役に立たない。

私の推測(そして、タイプ情報や行番号が十分でないため、推測を強調します)。

second=atof(extra[i+1].c_str());

// Guess 
// extra is std::string.

したがって、extra [x]は、メソッドc_str()を持たないcharを返します。

于 2009-11-07T23:32:55.993 に答える