我正在使用 Visual Studio Express 2013,并且是 C++ 新手(虽然我对 Java 有很好的了解,但这个问题让我难住了)。
“Dialogue”类中的“text”变量似乎与其他实例共享相同的值 我的意思是,dialog.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;
}
最佳答案
当您有 Java 背景时,您必须考虑到与 Java 不同,在 C++ 中您可以定义存在于类之外的事物。因此,您不仅可以在类中拥有静态变量(如 Java 中的静态变量),还可以拥有完全全局的变量或仅与命名空间关联的变量。据我所知,你不能在 Java 中做到这一点。
这就是你的代码中发生的事情。您的 std::string text
不是被定义为 Dialogue 类的成员,而是在它的外部,因此它基本上是一个全局变量,所以您是对的,它只存在一次,而不是每个 Dialog 实例。如果您进入 Dialogue (dialogue.h) 的类定义,它将按您的预期工作。
关于c++ - 在类的不同实例中共享的字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463343/