2012-04-20 84 views
0

我写了一个小型数独程序,我想这样做,所以每次按某个按钮时,该按钮上的文本都是前一个数字加1。所以,例如,我有一个大的按钮,说“1”,我点击它,它会说“2”,然后“3”,如果我再次点击它,等到“9”。无法从std :: basic_string转换为int Visual Studio C++

起初我认为它会非常简单,我用这个代码来调用一个整数,计数为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 2012-04-20 16:25:23

回答

0

s类型为intstr()返回string。你不能给int分配一个字符串。使用不同的变量来存储字符串。

下面是一些可能的代码。如果你想使用std::stringstream转换std::stringchar*int(尽管它不会编译)

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 2012-04-20 16:24:25

+1

它读入's',并且可以选择以字符串形式返回's'。它实际上并没有改变''的类型。使用'string'类型的变量来存储结果。 – chris 2012-04-20 16:25:24

+0

您可以发布我需要在您的文章中做的更改吗? – Bugster 2012-04-20 16:27:32

3

,它看起来是这样的:

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

或者您可以直接使用myStr构建此stringstream,得到相同的结果:

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

如果你想System::String^转换为std::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 2012-04-20 16:34:04

0

有很多的方式将字符串转换为int在C++ --the现代成语可能是安装Boost库和使用boost :: lexical_cast的。

但是,您的问题表明您对C++没有很好的掌握。如果您的努力点是要学习更多关于C++的知识,那么在尝试像数独这样复杂的东西之前,您可能需要尝试使用更简单的教程之一。

如果你只是想用Windows窗体构建一个数独游戏,我建议你放弃C++,看看C#或VB.Net,这对缺乏经验的程序员来说,缺陷少得多。

+0

其实我试图将int转换为字符串,我确实没有经验写C++桌面应用程序,但你在编码时学得最好,这就是为什么我奋斗 – Bugster 2012-04-20 16:32:44

2

既然你已经从String^,你想要的东西,如:

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

+ 1通过使用.NET Framework的功能来转换它。更好的解决方案:) – LihO 2012-04-20 22:17:48

相关问题