我写了这段代码来计算希腊入学考试中学生的分数。当程序计算得分并将其保存在变量moria
中时,我希望该数字出现在弹出窗口中。
#include <iostream>
#include <windows.h>
using namespace std;
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
计算得分并显示消息框代码的最后一部分是:
mathks= mathk*0.7 + mathkp*0.3 ;
aodes= aode*0.7 + aodep*0.3 ;
fysks= fysk*0.7 + fyskp*0.3 ;
aeps= aep*0.7 + aepp*0.3 ;
ek8eshs= ek8esh*0.7 + ek8eshp*0.3 ;
mathgs= mathg*0.7 + mathgp*0.3 ;
gvp=(mathks+aodes+fysks+aeps+ek8eshs+mathgs)/6 ;
x=mathk*1.3 ;
y=fysk*0.7 ;
moria=(gvp*8+x+y)*100 ;
string moria2 = to_string(moria);
MessageBox(NULL, moria2, "arithmos moriwn", NULL);
要打印一个很长的数字,我想我必须先把它变成一个字符串。但它仍然无法工作,我得到以下错误:
由于我最近才开始学习一些关于图形的东西,所以这里可能会有一些非常愚蠢的错误,所以请理解......
答案 0 :(得分:0)
int
转换为std::string
to_string
,因此编译器不知道您要执行的操作。我假设moria
是int
(或某个数字)。
要将int
转换为std::string
,您应该看看this question,其中突出了三种很好的方法:atoi
,std::ostringstream
,最近也是最好的std::to_string
(你似乎试图使用它)。
要正确使用std::to_string
,您应该写下以下内容:
std::string moria2 = std::to_string(moria);
请注意,std::to_string
仅来自C ++ 11,我假设您正在使用它。如果你没有C ++ 11则更喜欢std::ostingstream
:
std::ostringstream oss;
oss << moria;
std::string moria2 = oss.str();
作为旁注,您应该更倾向于指示性地命名变量,而不仅仅是附加数字。
std::string
转换为const char*
你的第二个问题是MessageBox
需要const char*
作为它的第二个论点,你提供的是std::string
(编译器无法隐式转换为);但是,std::string
优雅地为您提供了一种方法:std::string::c_str()
。因此,您的代码应为:
MessageBox(NULL, moria2.c_str(), "arithmos moriwn", NULL);
或者
MessageBox(NULL, std::to_string(moria).c_str(), "arithmos moriwn", NULL);
值得注意的是两位评论者@πάνταῥεῖ(我的道歉,如果这是不正确的)和@Jonathan Potter首先指出了这一点。
答案 1 :(得分:0)
您似乎未包含<string>
,因此未声明to_string()
。
问题2已经通过上述答案解决了。