7

私は以前にこの問題を抱えていましたが、回避策を見つけました。今回だけ回避策はオプションではありません。

'stof'関数を使用しようとしていますが、次のようなエラーが発生します:'stof'は'std'関数のメンバーではありません'stof'を解決できませんでした

このページに表示されている場合、私はそれを正確に使用しています:http ://www.cplusplus.com/reference/string/stof/

そして、ここに私のインクルードがあります:

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

だから、私は何が間違っているのですか?そして、解決策が見つからない場合、誰かが文字列をfloatに変換する別の方法を教えてくれ、文字列に互換性がない場合は例外をスローすることができますか?

編集:サンプルプログラムとエラーで更新しています。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main()
{
   string testString = "";
   float testFloat = 0.0;
   testFloat = std::stof(testString);

   return 0;
}

私が得るエラーは次のとおりです。

説明リソースパスロケーションタイプ'stof'は'std'のメンバーではありませんmain.cpp/Assignment / src line 33 C /C++問題

説明リソースパスロケーションタイプ関数'stof'を解決できませんでしたmain.cpp/Assignment / srcline33セマンティックエラー

4

2 に答える 2

11

stofは C++11 関数です。コンパイラがそれをサポートしていることを確認してください (C++11 を完全にサポートしているコンパイラはまだありませんが、最新のコンパイラのほとんどは現在、かなり大きなサブセットをサポートしています)。

たとえば g++ では、-std=c++11オプションで有効にする必要があります ( std=c++0xpre g++-4.7)。

g++ を使用している場合は、使用しているバージョンを確認してください。g++ -v古いバージョン (たとえば 4.2 など) の場合、c++11 の機能は利用できません。

于 2013-02-15T21:00:00.970 に答える
8

あなたはstof正しく使用しています。これは、gcc 4.7.2 の MinGW ビルドの既知のバグです。gcc 4.8 では修正されるはずです。SO には、文字列を数値に変換するための例が多数あります。これが1 つです。必要な例外動作を取得するには、独自のロールを作成する必要がありますが、例を参考にしてください。

于 2013-02-15T21:38:24.177 に答える