在类的不同实例中共享的字符串变量 我使用VisualStudioExpress 2013,并且是新的C++(虽然我对java有很好的理解,但这个问题让我难堪)。
“Dialogue”类中的“text”变量似乎与其其他实例共享相同的值 我的意思是,在控制台中,dialogue.Print()的两个输出“Then return!”在类的不同实例中共享的字符串变量 我使用VisualStudioExpress 2013,并且是新的C++(虽然我对java有很好的理解,但这个问题让我难堪)。,c++,C++,“Dialogue”类中的“text”变量似乎与其其他实例共享相同的值 我的意思是,在控制台中,dialogue.Print()的两个输出“Then return!” //Main Class int main() { Dialogue dialogue1("Okay..."); Dialogue dialogue2("Then give it back!"); dialogue1.Print(); dialogue2.Print(); } 注:这些类别是分开
//Main Class
int main()
{
Dialogue dialogue1("Okay...");
Dialogue dialogue2("Then give it back!");
dialogue1.Print();
dialogue2.Print();
}
注:这些类别是分开的
//The "Dialogue Class"
#include "Dialogue.h"
#include <iostream>
#include <string>
using namespace std;
string text;
Dialogue::Dialogue(string dialogue)
{
text = dialogue;
}
Dialogue::~Dialogue()
{
}
void Dialogue::Print()
{
cout << text << endl;
}
//对话类”
#包括“对话.h”
#包括
#包括
使用名称空间std;
字符串文本;
对话:对话(字符串对话)
{
文本=对话;
}
对话::~Dialogue()
{
}
void对话::Print()
{
不能将文本定义为全局变量
string text;
因此,同一个变量被反复使用
在类定义中将其定义为成员变量(我假设在dialogue.h中):
当你从java背景中来时,你必须考虑到C++中的爪哇不同,你可以定义类外存在的东西。这样你不仅可以在类中拥有静态变量(像java),而且你也可以有完全全局的变量或者只与名字空间相关。据我所知,你不能在java中这样做。
这就是代码中发生的情况。您的std::string text
不是定义为类对话的成员,而是在类对话之外,因此它基本上是一个全局变量,因此您是对的,它只存在一次,而不是每个对话实例。如果您进入对话的类定义(Dialogue.h)它将按你的预期工作。你的代码是写两次全局变量…<代码>主< /C> >不是一个类,它是一个函数。不像java,函数和数据可以在C++中的类外(命名空间中,在你的例子中在全局命名空间中)存在。谢谢你的回复,它非常有帮助。只是修复它。
class Dialogue {
...
string text;
...
};