问题说明了一切,真的。我不确定是什么问题。我刚上课;我对他们的实践经验几乎为零,但我已经阅读了很多关于他们的文章。
我已经使用以下构造函数创建了一个类 ECard
ECard::ECard( int bankNum, int PIN )
{
m_BankNum = new int;
m_PIN = new int;
m_Barred = new bool;
m_Amount = new double;
*m_BankNum = bankNum;
*m_PIN = PIN;
*m_Barred = false;
*m_Amount = 100.0;
}
然后我用 EC 卡( 12345, 54321 ) 初始化
我还有一个成员函数display(),它简单地打印出所有成员变量 BankNum、PIN、Barred 和 Amount。
当我在主函数中调用此函数 card.display() 时,输出完全符合我的预期。
但是,当它进入我的循环时:
/* Fine values! */
card.display();
while( true )
{
/* Introductory screen giving user options to choose from */
mainScreen( card );
/* Make a choice... */
choice = readInput();
/* Garbage! */
card.display();
/* Pass it to the switch, watch out for invalid input! doChoice is a bool */
if( !doChoice( choice, card ) )
{
cout << "Bad input- repeat!" << endl;
}
/* TODO: Option to terminate loop. */
}
然后我尝试在我的 doChoice() 函数中打印变量,我得到了垃圾。我所有的变量都搞砸了设置。我的 Banknumber 是什么,PIN 是一个非常大的负数(不是 MIN ),Barred 突然设置为 true,并且我的帐户中有 0 笔钱,即使 Barred 和 Amount 从未在构造函数之外的任何地方明确设置。
/* Outsourced switch that handles the user input from MAIN */
bool doChoice( int choice, ECard card )
{
int inputPIN;
int inputAmount;
/* Garbage! */
card.display();
switch( choice )
{
case 1:
/* Case 1: Charge card with money. Needs PIN and amount */
cout << "PIN Eingeben: ";
inputPIN = readInput();
cout << "\nBetrag Eingeben: ";
inputAmount = readInput();
karte.aufladen( inputAmount, inputPIN );
return true;
如果一些成员函数和输出仍然是德语,我很抱歉。无论如何这都不重要(我喜欢用英语写我所有的作业,因为我可能会为国际公司编程,但我的老师真的很挑剔,如果我的编程超出他的期望,就会降低我的分数)
变量甚至在进入开关之前就已经搞砸了,所以那部分应该只是修辞。我只能看到卡片对象的传递存在问题,但我不知道为什么会出现问题。我不知道如何解决,我是否只发送每个成员?创建一个指向该对象的指针并发送它?我的意思是,我之前传递了卡片对象,而另一个函数并没有给我垃圾。只有这个。
最后一点,如果突然出现语法错误,那是因为我很快将所有函数和成员翻译成英文,我可能在某处漏掉了大写字母等等。请忽略那些,语法正确并且程序运行,它只是显示垃圾值。
最佳答案
您正在按值(value)传递卡片。但是因为你有很多指针,而且可能没有写复制构造函数,卡的拷贝正在使用指针来更改主循环中的“旧”卡也在使用的内存。那么当函数退出时,想必你有一个删除所有成员变量的卡片析构函数?所以你基本上有悬空指针。如果没有 ECard 的所有代码,我无法确定,但这是我的猜测。
我不会在卡片中有指针。我认为 int* 比那里的 int 没有任何好处。然后,由于您希望 doChoice 更改卡,让它使用 ECard&,以便它可以更改您在 main 中使用的真实卡。
关于c++ - 初始化变量在函数调用后丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925129/
在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到rubygems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin