C++ 无法保存到类中的变量?
初学者代码。汇编得很好。SetMemo似乎可以工作(因为它重复输入),但当我尝试使用ReadMemo时,savedmemo似乎为空。除此之外,行中包含的任何其他内容都将打印。我做错了什么?我是不是不小心把变量擦到别处了C++ 无法保存到类中的变量?,c++,C++,初学者代码。汇编得很好。SetMemo似乎可以工作(因为它重复输入),但当我尝试使用ReadMemo时,savedmemo似乎为空。除此之外,行中包含的任何其他内容都将打印。我做错了什么?我是不是不小心把变量擦到别处了 #include "pch.h" #include <iostream> #include <string> using namespace std; int firstboot = 1; class MEMOCLASS { public:
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
int firstboot = 1;
class MEMOCLASS {
public:
void SetMemo(string memoinput_pvt) {
savedmemo = memoinput_pvt;
cout << savedmemo << " saved as a memo!" << endl;
};
string ReadMemo(){
return savedmemo;
};
private:
string savedmemo;
};
int main()
{
MEMOCLASS MMObj;
string input;
string memoinputmain;
if (firstboot == 1) {
cout << "Hello! Please use \"write memo\" to store a memo or \"read memo\" to read a previously stored memo. Type \"exit\" to quit the programme." << endl;
firstboot = 0;
}
else {
cout << "Ok, anything else I can do for you?" << endl;
}
getline(cin, input);
if (input == "write memo") {
cout << "Ok, go ahead. Press Enter to record the Memo.\n";
getline(cin, memoinputmain);
MMObj.SetMemo(memoinputmain);
main();
}
else if (input == "read memo") {
cout << "The memo reads: " << MMObj.ReadMemo() << endl;
main();
}
else if (input == "exit")
{
cout << "Cya!\n";
return 0;
}
else if (input == "help")
{
cout << "Use \"write memo\" to store a memo or \"read memo\" to read a previously stored memo. Type \"exit\" to quit the programme.\n";
main();
}
else {
cout << "Invalid input!\n";
main();
}
}
#包括“pch.h”
#包括
#包括
使用名称空间std;
int firstboot=1;
课堂备忘录{
公众:
作废设置备忘(字符串备忘输入){
savedmemo=memoinput\u pvt;
可能有两个问题:
在C++中,不允许递归调用。相反,使用循环(以任何方式调用<代码>主< /代码>,无论从何处,在代码中是正式的。)< /P>
由于递归调用main
,因此每次调用都会生成一个new和不同的变量MMObj
两个问题:
在C++中,不允许递归调用。相反,使用循环(以任何方式调用<代码>主< /代码>,无论从何处,在代码中是正式的。)< /P>
由于递归调用main
,因此每次调用都会生成一个new和不同的变量MMObj
首先,要记住一点。你不应该调用main
现在,当您调用main时,您创建的对象将不再存在。
有类似的代码吗
void foo()
{
int x = 6;
if (x == 6)
{
x = 7;
}
foo();
}
当再次调用时,将生成一个新的x
,并将x
的值设为6
您可以传入对象以使其保持在周围
void foo(int x)
{
if (x == 6)
{
x = 7;
}
foo(x);
}
在您的情况下,创建一个新函数,例如runMMObj
MEMOCLASS runMMObj(MEMOCLASS MMObj) //you know this is a copy, right?
{
//do reads and writes here
return MMObj;
}
int main()
{
MEMOCLASS MMObj;
MMObj = runMMObj(MMObj);
//rerun your new function if you want
}
首先,要记住一点。你不应该调用main
现在,当您调用main时,您创建的对象将不再存在。
有类似的代码吗
void foo()
{
int x = 6;
if (x == 6)
{
x = 7;
}
foo();
}
当再次调用时,将生成一个新的x
,并将x
的值设为6
您可以传入对象以使其保持在周围
void foo(int x)
{
if (x == 6)
{
x = 7;
}
foo(x);
}
在您的情况下,创建一个新函数,例如runMMObj
MEMOCLASS runMMObj(MEMOCLASS MMObj) //you know this is a copy, right?
{
//do reads and writes here
return MMObj;
}
int main()
{
MEMOCLASS MMObj;
MMObj = runMMObj(MMObj);
//rerun your new function if you want
}
main()一个函数的每个递归调用都有每个非静态局部变量的唯一实例。你做了<代码> FixBooS/<代码>一个全局变量,关于<代码> MMObj < /代码>?他们这样做的惯用方式不是递归,而是使用简单的C++。ode>while(true)
loop和break;
ing当一个循环完成时。如果else已经保证只执行一个块,否则将有continue;
跳过循环迭代的一部分。main()一个函数的每个递归调用都有每个非静态局部变量的唯一实例。你做了<代码> FixBooS/<代码>一个全局变量,关于<代码> MMObj < /代码>?他们这样做的惯用方式不是递归,而是使用简单的C++。ode>while(true)
loop和break;
ing当一个循环完成时。如果else已经保证只执行一个块,否则将有continue;
跳过循环迭代的一部分。不应该是2.因为调用main
,任何事情都可能发生?目前,它听起来好像是一个可以依赖的东西,但afaik调用main
是undefined@user463035818很好,但是很简单。@user463035818别忘了,未定义也可以包括预期的工作…如果编译器已经定义了它将要做的工作,那么虽然代码可能无法移植到其他编译器,但结果是user463035818从形式上看,它当然是UB,但对于几乎所有未定义的行为,实现仍然可以做一些事情。在这种情况下,它显然是作为“正常”处理的递归函数调用。它起作用了。删除了对main的所有调用,将firstboot移到main中,在“string memoinputmain”下面添加了一个while循环,它神奇地起作用了。非常感谢。应该是“因为你调用main
,任何事情都可能发生”?目前,它听起来好像是一个可以依赖的东西,但afaik调用main
是undefined@user463035818很好,但是很简单。@user463035818别忘了,未定义也可以包括预期的工作…如果编译器已经定义了它将要做的工作,那么虽然代码可能无法移植到其他编译器,但结果是user463035818从形式上看,它当然是UB,但对于几乎所有未定义的行为,实现仍然可以做一些事情。在这种情况下,它显然是作为“正常”处理的递归函数调用。它成功了。删除了对main的所有调用,将firstboot移到main中,在“string memoinputmain”下面添加了一个while循环,它神奇地成功了。非常感谢。