2012-04-20 14 views
0

私は小さなスドクプログラムを作成しました。そのボタンを押すたびに、そのボタンのテキストが前の番号に1ずつ増えていきます。std :: basic_stringからintに変換できませんVisual studio C++

たとえば、大きなボタンに「1」とクリックすると「2」と表示され、もう一度クリックすると「3」、「9」まで続きます。

最初は私はこのコードを使用してこのコードを使用して、ボタンのテキストと等しい文字列を9に数えて、intを文字列に変換しようとしましたが、失敗しましたエラーは以下の通りです。これはコードです:

int s = 0; 
String^ mystr = a0->Text; 
std::stringstream out; 
out << s; 
s = out.str(); //this is the error apparently. 
s++; 

そして、これは誤りです:

error C2440: '=' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>' to 'int'

私はそのエラーのためにMSDNに検索しようとしたが、それは私のものとは異なるだ、と私は、私が入った時よりも混乱してページを残しましたそれ。

また、参考までに、Windows XPではVisual Studio 2010 C++のWindowsフォームアプリケーションを使用しています。

+0

あなたは整数に文字列を代入しようとしているし、それが動作するように期待しています?また、C++/CLIはC++ではありません。 – Praetorian

答えて

0

は、タイプintです。 str()stringを返します。 intに文字列を代入することはできません。文字列を格納するには、別の変数を使用します。

ここでは、std::stringstreamを使用してintstd::stringまたはchar*を変換したい場合は、それは次のようになりますいくつかの可能なコード(それはコンパイルされませんが)

string text = GetButtonText(); //get button text 
stringstream ss (text); //create stringstream based on that 
int s; 
ss >> s; //format string as int and store into s 
++s; //increment 
ss << s; //store back into stringstream 
text = ss.str(); //get string of that 
SetButtonText (text); //set button text to the string 
+0

しかし、私は文字列に変換したと思った。あなたはそれを文字列に変換する任意の選択肢がありますか? – Bugster

+1

's'を読み込み、文字列形式で' s'を返すオプションがあります。実際に 's'の型は変更されません。 'string'型の変数を使用して結果を格納します。 – chris

+0

私はあなたのポストで行う必要がある変更を投稿できますか? – Bugster

3

です:

int s = 0; 
std::string myStr("7"); 
std::stringstream out; 
out << myStr; 
out >> s; 

をあるいは、同じ結果をもたらすmyStrを使って直接stringstreamを構築することができます:

std::stringstream out(myStr); 
out >> s; 

そして、あなたはstd::stringSystem::String^を変換したい場合、それは次のようになります。

#include <msclr\marshal_cppstd.h> 
... 
System::String^ clrString = "7"; 
std::string myStr = msclr::interop::marshal_as<std::string>(clrString); 

Ben Voigtが指摘したようものの:あなたはSystem::String^で起動したとき、あなたは、一部の機能を使用して、それを変換する必要があります.NET Frameworkを代わりに使用します。それはまた次のようになります。

System::String^ clrString = "7"; 
int i = System::Int32::Parse(clrString); 
+0

最初のメソッドを試したところ、 "演算子が見つかりませんでした。タイプ 'System :: string ^'の右辺のオペランドをとります。 – Bugster

0

Cのintに文字列を変換する方法はたくさんあります++ --the現代のイディオムは、ブーストライブラリをインストールし、ブーストを使用する::のlexical_castをすることであってもよいです。

しかし、あなたの質問は、C++を非常によく理解していないことを示しています。あなたの努力のポイントがC++についてもっと知ることであれば、多くの簡単なチュートリアルの1つを試みてから、スドクほど複雑なものを試してみてください。

Windowsフォームでスードクを構築したいのであれば、C++を落として、経験の浅いプログラマーのための落とし穴が少ないC#またはVB.Netをお勧めします。

+0

実際にintを文字列に変換しようとしています。デスクトップアプリケーションではありませんが、コーディングの際には最高のことを学ぶので、代わりに.NET Frameworkの関数を使用して – Bugster

2

あなたはString^で開始しているので、あなたが望むような何か:

int i; 
if (System::Int32::TryParse(a0->Text, i)) { 
    ++i; 
    a0->Text = i.ToString(); 
} 
+0

+1の変換に苦労しています。 – LihO

関連する問題